@pact-foundation/pact-core 13.7.1 → 13.7.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.
- package/CHANGELOG.md +21 -0
- package/README.md +4 -4
- package/bin/pact-broker.js +6 -3
- package/bin/pact-broker.js.map +1 -1
- package/bin/pact-message.js +6 -3
- package/bin/pact-message.js.map +1 -1
- package/bin/pact-mock-service.js +6 -3
- package/bin/pact-mock-service.js.map +1 -1
- package/bin/pact-provider-verifier.js +6 -3
- package/bin/pact-provider-verifier.js.map +1 -1
- package/bin/pact-stub-service.js +6 -3
- package/bin/pact-stub-service.js.map +1 -1
- package/bin/pact.js +6 -3
- package/bin/pact.js.map +1 -1
- package/bin/pactflow.js +6 -3
- package/bin/pactflow.js.map +1 -1
- package/build/Makefile +1 -1
- package/package.json +3 -2
- package/src/can-deploy.js +71 -78
- package/src/can-deploy.js.map +1 -1
- package/src/consumer/checkErrors.js +14 -33
- package/src/consumer/checkErrors.js.map +1 -1
- package/src/consumer/index.js +72 -94
- package/src/consumer/index.js.map +1 -1
- package/src/ffi/index.js +29 -11
- package/src/ffi/index.js.map +1 -1
- package/src/ffi/internals/index.js +14 -16
- package/src/ffi/internals/index.js.map +1 -1
- package/src/ffi/types.d.ts +5 -0
- package/src/ffi/types.js.map +1 -1
- package/src/index.js +4 -1
- package/src/index.js.map +1 -1
- package/src/logger/crashMessage.js +18 -1
- package/src/logger/crashMessage.js.map +1 -1
- package/src/logger/index.js +19 -42
- package/src/logger/index.js.map +1 -1
- package/src/logger/pino.js +7 -9
- package/src/logger/pino.js.map +1 -1
- package/src/message.js +25 -35
- package/src/message.js.map +1 -1
- package/src/pact-environment.js +26 -15
- package/src/pact-environment.js.map +1 -1
- package/src/pact-standalone.js +35 -15
- package/src/pact-standalone.js.map +1 -1
- package/src/pact.js +83 -67
- package/src/pact.js.map +1 -1
- package/src/publisher.js +52 -32
- package/src/publisher.js.map +1 -1
- package/src/server.js +18 -35
- package/src/server.js.map +1 -1
- package/src/service.js +115 -126
- package/src/service.js.map +1 -1
- package/src/spawn/arguments.js +17 -25
- package/src/spawn/arguments.js.map +1 -1
- package/src/spawn/index.js +4 -1
- package/src/spawn/index.js.map +1 -1
- package/src/spawn/spawn.js +50 -45
- package/src/spawn/spawn.js.map +1 -1
- package/src/stub.js +14 -30
- package/src/stub.js.map +1 -1
- package/src/verifier/argumentMapper/arguments.d.ts +14 -5
- package/src/verifier/argumentMapper/arguments.js +126 -87
- package/src/verifier/argumentMapper/arguments.js.map +1 -1
- package/src/verifier/argumentMapper/index.d.ts +3 -1
- package/src/verifier/argumentMapper/index.js +38 -57
- package/src/verifier/argumentMapper/index.js.map +1 -1
- package/src/verifier/argumentMapper/types.d.ts +20 -1
- package/src/verifier/argumentMapper/types.js +16 -0
- package/src/verifier/argumentMapper/types.js.map +1 -1
- package/src/verifier/index.js +16 -21
- package/src/verifier/index.js.map +1 -1
- package/src/verifier/nativeVerifier.js +33 -75
- package/src/verifier/nativeVerifier.js.map +1 -1
- package/src/verifier/types.d.ts +1 -0
- package/src/verifier/validateOptions.d.ts +12 -2
- package/src/verifier/validateOptions.js +157 -100
- package/src/verifier/validateOptions.js.map +1 -1
- package/standalone/install.js +16 -18
- package/standalone/install.js.map +1 -1
- package/tsconfig.json +1 -2
- package/src/verifier/filesystem/index.d.ts +0 -2
- package/src/verifier/filesystem/index.js +0 -24
- package/src/verifier/filesystem/index.js.map +0 -1
- package/src/verifier/filesystem/types.d.ts +0 -1
- package/src/verifier/filesystem/types.js +0 -3
- package/src/verifier/filesystem/types.js.map +0 -1
package/src/publisher.js
CHANGED
|
@@ -1,16 +1,38 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
+
}) : function(o, v) {
|
|
12
|
+
o["default"] = v;
|
|
13
|
+
});
|
|
14
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
+
if (mod && mod.__esModule) return mod;
|
|
16
|
+
var result = {};
|
|
17
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
+
__setModuleDefault(result, mod);
|
|
19
|
+
return result;
|
|
20
|
+
};
|
|
21
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
22
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
23
|
+
};
|
|
2
24
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
25
|
exports.Publisher = void 0;
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
26
|
+
const path = require("path");
|
|
27
|
+
const fs = require("fs");
|
|
28
|
+
const logger_1 = __importStar(require("./logger"));
|
|
29
|
+
const spawn_1 = __importDefault(require("./spawn"));
|
|
30
|
+
const promise_timeout_1 = require("promise-timeout");
|
|
31
|
+
const spawn_2 = require("./spawn");
|
|
32
|
+
const pact_standalone_1 = __importDefault(require("./pact-standalone"));
|
|
33
|
+
const checkTypes = require("check-types");
|
|
34
|
+
class Publisher {
|
|
35
|
+
constructor(options) {
|
|
14
36
|
this.__argMapping = {
|
|
15
37
|
pactFilesOrDirs: spawn_2.DEFAULT_ARG,
|
|
16
38
|
pactBroker: '--broker-base-url',
|
|
@@ -31,10 +53,10 @@ var Publisher = (function () {
|
|
|
31
53
|
checkTypes.assert.nonEmptyArray(options.pactFilesOrDirs, 'Must provide the pactFilesOrDirs argument with an array');
|
|
32
54
|
if (options.pactFilesOrDirs) {
|
|
33
55
|
checkTypes.assert.array.of.string(options.pactFilesOrDirs);
|
|
34
|
-
options.pactFilesOrDirs = options.pactFilesOrDirs.map(
|
|
35
|
-
|
|
56
|
+
options.pactFilesOrDirs = options.pactFilesOrDirs.map((v) => {
|
|
57
|
+
const newPath = path.resolve(v);
|
|
36
58
|
if (!fs.existsSync(newPath)) {
|
|
37
|
-
throw new Error(
|
|
59
|
+
throw new Error(`Path '${v}' given in pactFilesOrDirs does not exists.`);
|
|
38
60
|
}
|
|
39
61
|
return newPath;
|
|
40
62
|
});
|
|
@@ -61,39 +83,37 @@ var Publisher = (function () {
|
|
|
61
83
|
}
|
|
62
84
|
this.options = options;
|
|
63
85
|
}
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
instance.
|
|
71
|
-
instance.
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
var pactUrls = /https?:\/\/.*\/pacts\/.*$/gim.exec(o);
|
|
86
|
+
publish() {
|
|
87
|
+
logger_1.default.info(`Publishing pacts to broker at: ${this.options.pactBroker}`);
|
|
88
|
+
return promise_timeout_1.timeout(new Promise((resolve, reject) => {
|
|
89
|
+
const instance = spawn_1.default.spawnBinary(pact_standalone_1.default.brokerFullPath, [{ cliVerb: 'publish' }, this.options], this.__argMapping);
|
|
90
|
+
const output = [];
|
|
91
|
+
instance.stdout.on('data', (l) => output.push(l));
|
|
92
|
+
instance.stderr.on('data', (l) => output.push(l));
|
|
93
|
+
instance.once('close', (code) => {
|
|
94
|
+
const o = output.join('\n');
|
|
95
|
+
const pactUrls = /https?:\/\/.*\/pacts\/.*$/gim.exec(o);
|
|
75
96
|
if (code !== 0) {
|
|
76
|
-
|
|
97
|
+
const message = `Pact publication failed with non-zero exit code. Full output was:\n${o}`;
|
|
77
98
|
logger_1.default.error(message);
|
|
78
99
|
return reject(new Error(message));
|
|
79
100
|
}
|
|
80
101
|
if (!pactUrls) {
|
|
81
|
-
|
|
102
|
+
const message = `Publication appeared to fail, as we did not detect any pact URLs in the following output:\n${o}`;
|
|
82
103
|
logger_1.default.error(message);
|
|
83
104
|
return reject(new Error(message));
|
|
84
105
|
}
|
|
85
106
|
logger_1.default.info(o);
|
|
86
107
|
return resolve(pactUrls);
|
|
87
108
|
});
|
|
88
|
-
}), this.options.timeout).catch(
|
|
109
|
+
}), this.options.timeout).catch((err) => {
|
|
89
110
|
if (err instanceof promise_timeout_1.TimeoutError) {
|
|
90
|
-
throw new Error(
|
|
111
|
+
throw new Error(`Timeout waiting for publication process to complete`);
|
|
91
112
|
}
|
|
92
113
|
throw err;
|
|
93
114
|
});
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
}());
|
|
115
|
+
}
|
|
116
|
+
}
|
|
97
117
|
exports.Publisher = Publisher;
|
|
98
|
-
exports.default = (
|
|
118
|
+
exports.default = (options) => new Publisher(options);
|
|
99
119
|
//# sourceMappingURL=publisher.js.map
|
package/src/publisher.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publisher.js","sourceRoot":"","sources":["publisher.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"publisher.js","sourceRoot":"","sources":["publisher.ts"],"names":[],"mappings":"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"}
|
package/src/server.js
CHANGED
|
@@ -1,32 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
6
|
-
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
7
|
-
return extendStatics(d, b);
|
|
8
|
-
};
|
|
9
|
-
return function (d, b) {
|
|
10
|
-
if (typeof b !== "function" && b !== null)
|
|
11
|
-
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
12
|
-
extendStatics(d, b);
|
|
13
|
-
function __() { this.constructor = d; }
|
|
14
|
-
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
15
|
-
};
|
|
16
|
-
})();
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
17
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
6
|
exports.Server = void 0;
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
function Server(options) {
|
|
28
|
-
if (options === void 0) { options = {}; }
|
|
29
|
-
var _this = this;
|
|
7
|
+
const service_1 = require("./service");
|
|
8
|
+
const pact_standalone_1 = __importDefault(require("./pact-standalone"));
|
|
9
|
+
const path = require("path");
|
|
10
|
+
const fs = require("fs");
|
|
11
|
+
const mkdirp = require("mkdirp");
|
|
12
|
+
const checkTypes = require("check-types");
|
|
13
|
+
class Server extends service_1.AbstractService {
|
|
14
|
+
constructor(options = {}) {
|
|
30
15
|
options.dir = options.dir ? path.resolve(options.dir) : process.cwd();
|
|
31
16
|
options.pactFileWriteMode = options.pactFileWriteMode || 'overwrite';
|
|
32
17
|
if (options.spec) {
|
|
@@ -35,7 +20,7 @@ var Server = (function (_super) {
|
|
|
35
20
|
checkTypes.assert.positive(options.spec);
|
|
36
21
|
}
|
|
37
22
|
if (options.dir) {
|
|
38
|
-
|
|
23
|
+
const dir = path.resolve(options.dir);
|
|
39
24
|
try {
|
|
40
25
|
fs.statSync(dir).isDirectory();
|
|
41
26
|
}
|
|
@@ -67,10 +52,10 @@ var Server = (function (_super) {
|
|
|
67
52
|
fs.statSync(path.normalize(options.monkeypatch)).isFile();
|
|
68
53
|
}
|
|
69
54
|
catch (e) {
|
|
70
|
-
throw new Error(
|
|
55
|
+
throw new Error(`Monkeypatch ruby file not found at path: ${options.monkeypatch}`);
|
|
71
56
|
}
|
|
72
57
|
}
|
|
73
|
-
|
|
58
|
+
super(pact_standalone_1.default.mockServiceFullPath, options, {
|
|
74
59
|
port: '--port',
|
|
75
60
|
host: '--host',
|
|
76
61
|
log: '--log',
|
|
@@ -85,12 +70,10 @@ var Server = (function (_super) {
|
|
|
85
70
|
provider: '--provider',
|
|
86
71
|
monkeypatch: '--monkeypatch',
|
|
87
72
|
logLevel: '--log-level',
|
|
88
|
-
}, { cliVerb: 'service' })
|
|
89
|
-
|
|
90
|
-
return _this;
|
|
73
|
+
}, { cliVerb: 'service' });
|
|
74
|
+
this.options = options;
|
|
91
75
|
}
|
|
92
|
-
|
|
93
|
-
}(service_1.AbstractService));
|
|
76
|
+
}
|
|
94
77
|
exports.Server = Server;
|
|
95
|
-
exports.default = (
|
|
78
|
+
exports.default = (options) => new Server(options);
|
|
96
79
|
//# sourceMappingURL=server.js.map
|
package/src/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["server.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["server.ts"],"names":[],"mappings":"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"}
|
package/src/service.js
CHANGED
|
@@ -1,42 +1,44 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
var fs = require("fs");
|
|
21
|
-
var events = require("events");
|
|
22
|
-
var logger_1 = require("./logger");
|
|
23
|
-
var spawn_1 = require("./spawn");
|
|
24
|
-
var promise_timeout_1 = require("promise-timeout");
|
|
25
|
-
var mkdirp = require("mkdirp");
|
|
26
|
-
var checkTypes = require("check-types");
|
|
27
|
-
var needle = require("needle");
|
|
28
|
-
var setTimeout = global.setTimeout;
|
|
29
|
-
var RETRY_AMOUNT = 60;
|
|
30
|
-
var getTimeout = function (options) {
|
|
31
|
-
return options.timeout || 30000;
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
+
}) : function(o, v) {
|
|
12
|
+
o["default"] = v;
|
|
13
|
+
});
|
|
14
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
+
if (mod && mod.__esModule) return mod;
|
|
16
|
+
var result = {};
|
|
17
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
+
__setModuleDefault(result, mod);
|
|
19
|
+
return result;
|
|
32
20
|
};
|
|
33
|
-
var
|
|
34
|
-
return
|
|
21
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
22
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
35
23
|
};
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
24
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
|
+
exports.AbstractService = void 0;
|
|
26
|
+
const path = require("path");
|
|
27
|
+
const fs = require("fs");
|
|
28
|
+
const events = require("events");
|
|
29
|
+
const logger_1 = __importStar(require("./logger"));
|
|
30
|
+
const spawn_1 = __importDefault(require("./spawn"));
|
|
31
|
+
const promise_timeout_1 = require("promise-timeout");
|
|
32
|
+
const mkdirp = require("mkdirp");
|
|
33
|
+
const checkTypes = require("check-types");
|
|
34
|
+
const needle = require("needle");
|
|
35
|
+
const setTimeout = global.setTimeout;
|
|
36
|
+
const RETRY_AMOUNT = 60;
|
|
37
|
+
const getTimeout = (options) => options.timeout || 30000;
|
|
38
|
+
const getRetryTickTime = (options) => Math.round(getTimeout(options) / RETRY_AMOUNT);
|
|
39
|
+
class AbstractService extends events.EventEmitter {
|
|
40
|
+
constructor(command, options, argMapping, cliVerb) {
|
|
41
|
+
super();
|
|
40
42
|
if (options.logLevel) {
|
|
41
43
|
logger_1.setLogLevel(options.logLevel);
|
|
42
44
|
if (options.logLevel === 'fatal') {
|
|
@@ -55,7 +57,7 @@ var AbstractService = (function (_super) {
|
|
|
55
57
|
checkTypes.assert.integer(options.port);
|
|
56
58
|
checkTypes.assert.positive(options.port);
|
|
57
59
|
if (!checkTypes.inRange(options.port, 0, 65535)) {
|
|
58
|
-
throw new Error(
|
|
60
|
+
throw new Error(`Port number ${options.port} is not in the range 0-65535`);
|
|
59
61
|
}
|
|
60
62
|
if (checkTypes.not.inRange(options.port, 1024, 49151)) {
|
|
61
63
|
logger_1.default.warn('Like a Boss, you used a port outside of the recommended range (1024 to 49151); I too like to live dangerously.');
|
|
@@ -71,7 +73,7 @@ var AbstractService = (function (_super) {
|
|
|
71
73
|
fs.statSync(path.normalize(options.sslcert)).isFile();
|
|
72
74
|
}
|
|
73
75
|
catch (e) {
|
|
74
|
-
throw new Error(
|
|
76
|
+
throw new Error(`Custom ssl certificate not found at path: ${options.sslcert}`);
|
|
75
77
|
}
|
|
76
78
|
}
|
|
77
79
|
if (options.sslkey) {
|
|
@@ -79,7 +81,7 @@ var AbstractService = (function (_super) {
|
|
|
79
81
|
fs.statSync(path.normalize(options.sslkey)).isFile();
|
|
80
82
|
}
|
|
81
83
|
catch (e) {
|
|
82
|
-
throw new Error(
|
|
84
|
+
throw new Error(`Custom ssl key not found at path: ${options.sslkey}`);
|
|
83
85
|
}
|
|
84
86
|
}
|
|
85
87
|
if (options.sslcert && options.sslkey) {
|
|
@@ -87,7 +89,7 @@ var AbstractService = (function (_super) {
|
|
|
87
89
|
}
|
|
88
90
|
checkTypes.assert.boolean(options.cors);
|
|
89
91
|
if (options.log) {
|
|
90
|
-
|
|
92
|
+
const fileObj = path.parse(path.normalize(options.log));
|
|
91
93
|
try {
|
|
92
94
|
fs.statSync(fileObj.dir).isDirectory();
|
|
93
95
|
}
|
|
@@ -98,103 +100,92 @@ var AbstractService = (function (_super) {
|
|
|
98
100
|
if (options.host) {
|
|
99
101
|
checkTypes.assert.string(options.host);
|
|
100
102
|
}
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
return _this;
|
|
103
|
+
this.options = options;
|
|
104
|
+
this.__running = false;
|
|
105
|
+
this.__cliVerb = cliVerb;
|
|
106
|
+
this.__serviceCommand = command;
|
|
107
|
+
this.__argMapping = argMapping;
|
|
107
108
|
}
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
enumerable: false,
|
|
117
|
-
configurable: true
|
|
118
|
-
});
|
|
119
|
-
AbstractService.prototype.start = function () {
|
|
120
|
-
var _this = this;
|
|
109
|
+
static get Events() {
|
|
110
|
+
return {
|
|
111
|
+
START_EVENT: 'start',
|
|
112
|
+
STOP_EVENT: 'stop',
|
|
113
|
+
DELETE_EVENT: 'delete',
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
start() {
|
|
121
117
|
if (this.__instance && this.__instance.connected) {
|
|
122
|
-
logger_1.default.warn(
|
|
118
|
+
logger_1.default.warn(`You already have a process running with PID: ${this.__instance.pid}`);
|
|
123
119
|
return Promise.resolve(this);
|
|
124
120
|
}
|
|
125
121
|
this.__instance = this.spawnBinary();
|
|
126
|
-
this.__instance.once('close',
|
|
122
|
+
this.__instance.once('close', () => this.stop());
|
|
127
123
|
if (!this.options.port) {
|
|
128
|
-
|
|
129
|
-
|
|
124
|
+
const catchPort = (data) => {
|
|
125
|
+
const match = data.match(/port=([0-9]+)/);
|
|
130
126
|
if (match && match[1]) {
|
|
131
|
-
|
|
132
|
-
if (
|
|
133
|
-
|
|
127
|
+
this.options.port = parseInt(match[1], 10);
|
|
128
|
+
if (this.__instance) {
|
|
129
|
+
this.__instance.stdout.removeListener('data', catchPort);
|
|
134
130
|
}
|
|
135
|
-
logger_1.default.info(
|
|
131
|
+
logger_1.default.info(`Pact running on port ${this.options.port}`);
|
|
136
132
|
}
|
|
137
133
|
};
|
|
138
|
-
this.__instance.stdout.on('data',
|
|
134
|
+
this.__instance.stdout.on('data', catchPort);
|
|
139
135
|
}
|
|
140
|
-
this.__instance.stderr.on('data',
|
|
141
|
-
return logger_1.default.error("Pact Binary Error: " + data);
|
|
142
|
-
});
|
|
136
|
+
this.__instance.stderr.on('data', (data) => logger_1.default.error(`Pact Binary Error: ${data}`));
|
|
143
137
|
return promise_timeout_1.timeout(this.__waitForServiceUp(), getTimeout(this.options))
|
|
144
|
-
.then(
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
return
|
|
138
|
+
.then(() => {
|
|
139
|
+
this.__running = true;
|
|
140
|
+
this.emit(AbstractService.Events.START_EVENT, this);
|
|
141
|
+
return this;
|
|
148
142
|
})
|
|
149
|
-
.catch(
|
|
143
|
+
.catch((err) => {
|
|
150
144
|
if (err instanceof promise_timeout_1.TimeoutError) {
|
|
151
|
-
throw new Error(
|
|
145
|
+
throw new Error(`Timeout while waiting to start Pact with PID: ${this.__instance ? this.__instance.pid : 'No Instance'}`);
|
|
152
146
|
}
|
|
153
147
|
throw err;
|
|
154
148
|
});
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
var pid = this.__instance ? this.__instance.pid : -1;
|
|
149
|
+
}
|
|
150
|
+
stop() {
|
|
151
|
+
const pid = this.__instance ? this.__instance.pid : -1;
|
|
159
152
|
return promise_timeout_1.timeout(Promise.resolve(this.__instance)
|
|
160
153
|
.then(spawn_1.default.killBinary)
|
|
161
|
-
.then(
|
|
162
|
-
.catch(
|
|
154
|
+
.then(() => this.__waitForServiceDown()), getTimeout(this.options))
|
|
155
|
+
.catch((err) => {
|
|
163
156
|
if (err instanceof promise_timeout_1.TimeoutError) {
|
|
164
|
-
throw new Error(
|
|
157
|
+
throw new Error(`Timeout while waiting to stop Pact with PID '${pid}'`);
|
|
165
158
|
}
|
|
166
159
|
throw err;
|
|
167
160
|
})
|
|
168
|
-
.then(
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
return
|
|
161
|
+
.then(() => {
|
|
162
|
+
this.__running = false;
|
|
163
|
+
this.emit(AbstractService.Events.STOP_EVENT, this);
|
|
164
|
+
return this;
|
|
172
165
|
});
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
return _this;
|
|
166
|
+
}
|
|
167
|
+
delete() {
|
|
168
|
+
return this.stop().then(() => {
|
|
169
|
+
this.emit(AbstractService.Events.DELETE_EVENT, this);
|
|
170
|
+
return this;
|
|
179
171
|
});
|
|
180
|
-
}
|
|
181
|
-
|
|
172
|
+
}
|
|
173
|
+
spawnBinary() {
|
|
182
174
|
return spawn_1.default.spawnBinary(this.__serviceCommand, this.__cliVerb ? [this.__cliVerb, this.options] : [this.options], this.__argMapping);
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
var retry = function () {
|
|
175
|
+
}
|
|
176
|
+
__waitForServiceUp() {
|
|
177
|
+
let amount = 0;
|
|
178
|
+
const waitPromise = new Promise((resolve, reject) => {
|
|
179
|
+
const retry = () => {
|
|
189
180
|
if (amount >= RETRY_AMOUNT) {
|
|
190
|
-
reject(new Error(
|
|
181
|
+
reject(new Error(`Pact startup failed; tried calling service ${RETRY_AMOUNT} times with no result.`));
|
|
191
182
|
}
|
|
192
|
-
setTimeout(check.bind(
|
|
183
|
+
setTimeout(check.bind(this), getRetryTickTime(this.options));
|
|
193
184
|
};
|
|
194
|
-
|
|
185
|
+
const check = () => {
|
|
195
186
|
amount++;
|
|
196
|
-
if (
|
|
197
|
-
|
|
187
|
+
if (this.options.port) {
|
|
188
|
+
this.__call(this.options).then(() => resolve(), retry.bind(this));
|
|
198
189
|
}
|
|
199
190
|
else {
|
|
200
191
|
retry();
|
|
@@ -203,21 +194,20 @@ var AbstractService = (function (_super) {
|
|
|
203
194
|
check();
|
|
204
195
|
});
|
|
205
196
|
return waitPromise;
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
var check = function () {
|
|
197
|
+
}
|
|
198
|
+
__waitForServiceDown() {
|
|
199
|
+
let amount = 0;
|
|
200
|
+
const checkPromise = new Promise((resolve, reject) => {
|
|
201
|
+
const check = () => {
|
|
212
202
|
amount++;
|
|
213
|
-
if (
|
|
214
|
-
|
|
203
|
+
if (this.options.port) {
|
|
204
|
+
this.__call(this.options).then(() => {
|
|
215
205
|
if (amount >= RETRY_AMOUNT) {
|
|
216
|
-
reject(new Error(
|
|
206
|
+
reject(new Error(`Pact stop failed; tried calling service ${RETRY_AMOUNT} times with no result.`));
|
|
217
207
|
return;
|
|
218
208
|
}
|
|
219
|
-
setTimeout(check, getRetryTickTime(
|
|
220
|
-
},
|
|
209
|
+
setTimeout(check, getRetryTickTime(this.options));
|
|
210
|
+
}, () => resolve());
|
|
221
211
|
}
|
|
222
212
|
else {
|
|
223
213
|
resolve();
|
|
@@ -226,9 +216,9 @@ var AbstractService = (function (_super) {
|
|
|
226
216
|
check();
|
|
227
217
|
});
|
|
228
218
|
return checkPromise;
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
|
|
219
|
+
}
|
|
220
|
+
__call(options) {
|
|
221
|
+
const config = {
|
|
232
222
|
method: 'GET',
|
|
233
223
|
headers: {
|
|
234
224
|
'X-Pact-Mock-Service': 'true',
|
|
@@ -240,13 +230,12 @@ var AbstractService = (function (_super) {
|
|
|
240
230
|
config.rejectUnauthorized = false;
|
|
241
231
|
config.agent = false;
|
|
242
232
|
}
|
|
243
|
-
return needle('get',
|
|
233
|
+
return needle('get', `http${options.ssl ? 's' : ''}://${options.host}:${options.port}`, config).then((res) => {
|
|
244
234
|
if (res.statusCode !== 200) {
|
|
245
|
-
throw new Error(
|
|
235
|
+
throw new Error(`HTTP Error: '${JSON.stringify(res)}'`);
|
|
246
236
|
}
|
|
247
237
|
});
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
}(events.EventEmitter));
|
|
238
|
+
}
|
|
239
|
+
}
|
|
251
240
|
exports.AbstractService = AbstractService;
|
|
252
241
|
//# sourceMappingURL=service.js.map
|
package/src/service.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.js","sourceRoot":"","sources":["service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["service.ts"],"names":[],"mappings":"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"}
|