@pact-foundation/pact 10.0.0-beta.9 → 10.0.0
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 +2451 -1
- package/CODE_OF_CONDUCT.md +1 -1
- package/CONTRIBUTING.md +49 -12
- package/MIGRATION.md +77 -0
- package/README.md +180 -1274
- package/RELEASING.md +63 -59
- package/package.json +96 -98
- package/src/common/jsonTypes.d.ts +5 -0
- package/src/common/jsonTypes.js +3 -0
- package/src/common/jsonTypes.js.map +1 -0
- package/src/common/logger.d.ts +10 -0
- package/src/common/logger.js +32 -0
- package/src/common/logger.js.map +1 -0
- package/src/common/net.d.ts +9 -0
- package/src/common/net.js +82 -0
- package/src/common/net.js.map +1 -0
- package/{common → src/common}/net.spec.d.ts +0 -0
- package/src/common/net.spec.js +69 -0
- package/src/common/net.spec.js.map +1 -0
- package/src/common/request.d.ts +21 -0
- package/src/common/request.js +110 -0
- package/src/common/request.js.map +1 -0
- package/{common → src/common}/request.spec.d.ts +0 -0
- package/src/common/request.spec.js +69 -0
- package/src/common/request.spec.js.map +1 -0
- package/src/common/spec.d.ts +2 -0
- package/src/common/spec.js +22 -0
- package/src/common/spec.js.map +1 -0
- package/{dsl → src/dsl}/apolloGraphql.d.ts +1 -1
- package/{dsl → src/dsl}/apolloGraphql.js +4 -1
- package/src/dsl/apolloGraphql.js.map +1 -0
- package/{dsl → src/dsl}/apolloGraphql.spec.d.ts +0 -0
- package/src/dsl/apolloGraphql.spec.js +74 -0
- package/src/dsl/apolloGraphql.spec.js.map +1 -0
- package/{dsl → src/dsl}/graphql.d.ts +19 -8
- package/{dsl → src/dsl}/graphql.js +59 -31
- package/src/dsl/graphql.js.map +1 -0
- package/{dsl → src/dsl}/graphql.spec.d.ts +0 -0
- package/src/dsl/graphql.spec.js +229 -0
- package/src/dsl/graphql.spec.js.map +1 -0
- package/{dsl → src/dsl}/interaction.d.ts +22 -20
- package/src/dsl/interaction.js +144 -0
- package/src/dsl/interaction.js.map +1 -0
- package/{dsl → src/dsl}/interaction.spec.d.ts +0 -0
- package/src/dsl/interaction.spec.js +214 -0
- package/src/dsl/interaction.spec.js.map +1 -0
- package/src/dsl/matchers.d.ts +143 -0
- package/{dsl → src/dsl}/matchers.js +92 -93
- package/src/dsl/matchers.js.map +1 -0
- package/{dsl → src/dsl}/matchers.spec.d.ts +0 -0
- package/src/dsl/matchers.spec.js +668 -0
- package/src/dsl/matchers.spec.js.map +1 -0
- package/{dsl → src/dsl}/message.d.ts +32 -12
- package/{dsl → src/dsl}/message.js +0 -0
- package/{dsl → src/dsl}/message.js.map +1 -1
- package/src/dsl/mockService.d.ts +13 -0
- package/src/dsl/mockService.js +3 -0
- package/src/dsl/mockService.js.map +1 -0
- package/{dsl → src/dsl}/options.d.ts +7 -6
- package/{dsl → src/dsl}/options.js +0 -0
- package/{dsl → src/dsl}/options.js.map +1 -1
- package/src/dsl/verifier/index.d.ts +1 -0
- package/src/dsl/verifier/index.js +18 -0
- package/src/dsl/verifier/index.js.map +1 -0
- package/src/dsl/verifier/proxy/hooks.d.ts +4 -0
- package/src/dsl/verifier/proxy/hooks.js +109 -0
- package/src/dsl/verifier/proxy/hooks.js.map +1 -0
- package/src/dsl/verifier/proxy/index.d.ts +1 -0
- package/src/dsl/verifier/proxy/index.js +18 -0
- package/src/dsl/verifier/proxy/index.js.map +1 -0
- package/src/dsl/verifier/proxy/parseBody.d.ts +7 -0
- package/src/dsl/verifier/proxy/parseBody.js +22 -0
- package/src/dsl/verifier/proxy/parseBody.js.map +1 -0
- package/{dsl/mockService.spec.d.ts → src/dsl/verifier/proxy/parseBody.spec.d.ts} +0 -0
- package/src/dsl/verifier/proxy/parseBody.spec.js +118 -0
- package/src/dsl/verifier/proxy/parseBody.spec.js.map +1 -0
- package/src/dsl/verifier/proxy/proxy.d.ts +4 -0
- package/src/dsl/verifier/proxy/proxy.js +92 -0
- package/src/dsl/verifier/proxy/proxy.js.map +1 -0
- package/{dsl/publisher.spec.d.ts → src/dsl/verifier/proxy/proxy.spec.d.ts} +0 -0
- package/src/dsl/verifier/proxy/proxy.spec.js +33 -0
- package/src/dsl/verifier/proxy/proxy.spec.js.map +1 -0
- package/src/dsl/verifier/proxy/stateHandler/index.d.ts +1 -0
- package/src/dsl/verifier/proxy/stateHandler/index.js +18 -0
- package/src/dsl/verifier/proxy/stateHandler/index.js.map +1 -0
- package/src/dsl/verifier/proxy/stateHandler/setupStates.d.ts +3 -0
- package/src/dsl/verifier/proxy/stateHandler/setupStates.js +48 -0
- package/src/dsl/verifier/proxy/stateHandler/setupStates.js.map +1 -0
- package/{dsl/verifier.spec.d.ts → src/dsl/verifier/proxy/stateHandler/setupStates.spec.d.ts} +0 -0
- package/src/dsl/verifier/proxy/stateHandler/setupStates.spec.js +191 -0
- package/src/dsl/verifier/proxy/stateHandler/setupStates.spec.js.map +1 -0
- package/src/dsl/verifier/proxy/stateHandler/stateHandler.d.ts +3 -0
- package/src/dsl/verifier/proxy/stateHandler/stateHandler.js +14 -0
- package/src/dsl/verifier/proxy/stateHandler/stateHandler.js.map +1 -0
- package/{httpPact.spec.d.ts → src/dsl/verifier/proxy/stateHandler/stateHandler.spec.d.ts} +0 -0
- package/src/dsl/verifier/proxy/stateHandler/stateHandler.spec.js +130 -0
- package/src/dsl/verifier/proxy/stateHandler/stateHandler.spec.js.map +1 -0
- package/src/dsl/verifier/proxy/tracer.d.ts +3 -0
- package/src/dsl/verifier/proxy/tracer.js +52 -0
- package/src/dsl/verifier/proxy/tracer.js.map +1 -0
- package/src/dsl/verifier/proxy/types.d.ts +48 -0
- package/src/dsl/verifier/proxy/types.js +3 -0
- package/src/dsl/verifier/proxy/types.js.map +1 -0
- package/src/dsl/verifier/types.d.ts +3 -0
- package/src/dsl/verifier/types.js +3 -0
- package/src/dsl/verifier/types.js.map +1 -0
- package/src/dsl/verifier/verifier.d.ts +16 -0
- package/src/dsl/verifier/verifier.js +129 -0
- package/src/dsl/verifier/verifier.js.map +1 -0
- package/{messageConsumerPact.spec.d.ts → src/dsl/verifier/verifier.spec.d.ts} +0 -0
- package/src/dsl/verifier/verifier.spec.js +172 -0
- package/src/dsl/verifier/verifier.spec.js.map +1 -0
- package/{errors → src/errors}/configurationError.d.ts +0 -0
- package/{errors → src/errors}/configurationError.js +3 -1
- package/src/errors/configurationError.js.map +1 -0
- package/{errors → src/errors}/graphQLQueryError.d.ts +0 -0
- package/{errors → src/errors}/graphQLQueryError.js +3 -1
- package/src/errors/graphQLQueryError.js.map +1 -0
- package/{errors → src/errors}/matcherError.d.ts +0 -0
- package/{errors → src/errors}/matcherError.js +3 -1
- package/src/errors/matcherError.js.map +1 -0
- package/{errors → src/errors}/verificationError.d.ts +0 -0
- package/{errors → src/errors}/verificationError.js +3 -1
- package/src/errors/verificationError.js.map +1 -0
- package/src/httpPact/ffi.d.ts +15 -0
- package/src/httpPact/ffi.js +91 -0
- package/src/httpPact/ffi.js.map +1 -0
- package/{messageProviderPact.spec.d.ts → src/httpPact/ffi.spec.d.ts} +0 -0
- package/src/httpPact/ffi.spec.js +81 -0
- package/src/httpPact/ffi.spec.js.map +1 -0
- package/{httpPact.d.ts → src/httpPact/index.d.ts} +12 -12
- package/src/httpPact/index.js +311 -0
- package/src/httpPact/index.js.map +1 -0
- package/{pact-web.spec.d.ts → src/httpPact/index.spec.d.ts} +0 -0
- package/src/httpPact/index.spec.js +238 -0
- package/src/httpPact/index.spec.js.map +1 -0
- package/src/httpPact/tracing.d.ts +1 -0
- package/src/httpPact/tracing.js +53 -0
- package/src/httpPact/tracing.js.map +1 -0
- package/{pact.d.ts → src/index.d.ts} +22 -21
- package/src/index.js +107 -0
- package/src/index.js.map +1 -0
- package/src/messageConsumerPact.d.ts +86 -0
- package/src/messageConsumerPact.js +222 -0
- package/src/messageConsumerPact.js.map +1 -0
- package/src/messageConsumerPact.spec.d.ts +1 -0
- package/src/messageConsumerPact.spec.js +117 -0
- package/src/messageConsumerPact.spec.js.map +1 -0
- package/{messageProviderPact.d.ts → src/messageProviderPact.d.ts} +7 -4
- package/src/messageProviderPact.js +190 -0
- package/src/messageProviderPact.js.map +1 -0
- package/src/messageProviderPact.spec.d.ts +1 -0
- package/src/messageProviderPact.spec.js +183 -0
- package/src/messageProviderPact.spec.js.map +1 -0
- package/{pact.integration.spec.d.ts → src/pact.integration.spec.d.ts} +0 -0
- package/{pact.integration.spec.js → src/pact.integration.spec.js} +0 -0
- package/src/pact.integration.spec.js.map +1 -0
- package/src/v3/display.d.ts +6 -0
- package/src/v3/display.js +83 -0
- package/src/v3/display.js.map +1 -0
- package/src/v3/index.d.ts +17 -0
- package/src/v3/index.js +47 -0
- package/src/v3/index.js.map +1 -0
- package/src/v3/matchers.d.ts +182 -0
- package/src/v3/matchers.js +443 -0
- package/src/v3/matchers.js.map +1 -0
- package/src/v3/matchers.spec.d.ts +1 -0
- package/src/v3/matchers.spec.js +461 -0
- package/src/v3/matchers.spec.js.map +1 -0
- package/src/v3/pact.d.ts +21 -0
- package/src/v3/pact.js +240 -0
- package/src/v3/pact.js.map +1 -0
- package/src/v3/types.d.ts +81 -0
- package/src/v3/types.js +11 -0
- package/src/v3/types.js.map +1 -0
- package/{v3 → src/v3}/xml/xmlBuilder.d.ts +2 -2
- package/{v3 → src/v3}/xml/xmlBuilder.js +2 -1
- package/src/v3/xml/xmlBuilder.js.map +1 -0
- package/src/v3/xml/xmlElement.d.ts +27 -0
- package/{v3 → src/v3}/xml/xmlElement.js +21 -15
- package/src/v3/xml/xmlElement.js.map +1 -0
- package/src/v3/xml/xmlElement.spec.d.ts +1 -0
- package/src/v3/xml/xmlElement.spec.js +102 -0
- package/src/v3/xml/xmlElement.spec.js.map +1 -0
- package/{v3 → src/v3}/xml/xmlNode.d.ts +0 -0
- package/{v3 → src/v3}/xml/xmlNode.js +1 -0
- package/src/v3/xml/xmlNode.js.map +1 -0
- package/src/v3/xml/xmlText.d.ts +7 -0
- package/{v3 → src/v3}/xml/xmlText.js +4 -1
- package/src/v3/xml/xmlText.js.map +1 -0
- package/test/helper.d.ts +1 -0
- package/test/helper.js +37 -0
- package/test/helper.js.map +1 -0
- package/ROADMAP.md +0 -20
- package/common/logger.d.ts +0 -7
- package/common/logger.js +0 -56
- package/common/logger.js.map +0 -1
- package/common/metadata.d.ts +0 -0
- package/common/metadata.js +0 -2
- package/common/metadata.js.map +0 -1
- package/common/net.d.ts +0 -9
- package/common/net.js +0 -48
- package/common/net.js.map +0 -1
- package/common/net.spec.js +0 -67
- package/common/net.spec.js.map +0 -1
- package/common/request.d.ts +0 -14
- package/common/request.js +0 -47
- package/common/request.js.map +0 -1
- package/common/request.spec.js +0 -71
- package/common/request.spec.js.map +0 -1
- package/common/utils.d.ts +0 -2
- package/common/utils.js +0 -10
- package/common/utils.js.map +0 -1
- package/dsl/apolloGraphql.js.map +0 -1
- package/dsl/apolloGraphql.spec.js +0 -47
- package/dsl/apolloGraphql.spec.js.map +0 -1
- package/dsl/graphql.js.map +0 -1
- package/dsl/graphql.spec.js +0 -150
- package/dsl/graphql.spec.js.map +0 -1
- package/dsl/interaction.js +0 -112
- package/dsl/interaction.js.map +0 -1
- package/dsl/interaction.spec.js +0 -217
- package/dsl/interaction.spec.js.map +0 -1
- package/dsl/matchers.d.ts +0 -269
- package/dsl/matchers.js.map +0 -1
- package/dsl/matchers.spec.js +0 -563
- package/dsl/matchers.spec.js.map +0 -1
- package/dsl/mockService.d.ts +0 -58
- package/dsl/mockService.js +0 -74
- package/dsl/mockService.js.map +0 -1
- package/dsl/mockService.spec.js +0 -126
- package/dsl/mockService.spec.js.map +0 -1
- package/dsl/publisher.d.ts +0 -6
- package/dsl/publisher.js +0 -19
- package/dsl/publisher.js.map +0 -1
- package/dsl/publisher.spec.js +0 -21
- package/dsl/publisher.spec.js.map +0 -1
- package/dsl/verifier.d.ts +0 -39
- package/dsl/verifier.js +0 -173
- package/dsl/verifier.js.map +0 -1
- package/dsl/verifier.spec.js +0 -299
- package/dsl/verifier.spec.js.map +0 -1
- package/errors/configurationError.js.map +0 -1
- package/errors/graphQLQueryError.js.map +0 -1
- package/errors/matcherError.js.map +0 -1
- package/errors/verificationError.js.map +0 -1
- package/httpPact.js +0 -206
- package/httpPact.js.map +0 -1
- package/httpPact.spec.js +0 -337
- package/httpPact.spec.js.map +0 -1
- package/messageConsumerPact.d.ts +0 -67
- package/messageConsumerPact.js +0 -161
- package/messageConsumerPact.js.map +0 -1
- package/messageConsumerPact.spec.js +0 -161
- package/messageConsumerPact.spec.js.map +0 -1
- package/messageProviderPact.js +0 -139
- package/messageProviderPact.js.map +0 -1
- package/messageProviderPact.spec.js +0 -143
- package/messageProviderPact.spec.js.map +0 -1
- package/pact-web.d.ts +0 -100
- package/pact-web.js +0 -151
- package/pact-web.js.map +0 -1
- package/pact-web.spec.js +0 -191
- package/pact-web.spec.js.map +0 -1
- package/pact.integration.spec.js.map +0 -1
- package/pact.js +0 -74
- package/pact.js.map +0 -1
- package/v3/index.d.ts +0 -23
- package/v3/index.js +0 -33
- package/v3/index.js.map +0 -1
- package/v3/matchers.d.ts +0 -199
- package/v3/matchers.js +0 -305
- package/v3/matchers.js.map +0 -1
- package/v3/pact.d.ts +0 -47
- package/v3/pact.js +0 -101
- package/v3/pact.js.map +0 -1
- package/v3/verifier.d.ts +0 -27
- package/v3/verifier.js +0 -46
- package/v3/verifier.js.map +0 -1
- package/v3/xml/xmlBuilder.js.map +0 -1
- package/v3/xml/xmlElement.d.ts +0 -34
- package/v3/xml/xmlElement.js.map +0 -1
- package/v3/xml/xmlNode.js.map +0 -1
- package/v3/xml/xmlText.d.ts +0 -6
- package/v3/xml/xmlText.js.map +0 -1
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @module Message
|
|
4
|
+
*/
|
|
5
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
8
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
9
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
10
|
+
}
|
|
11
|
+
Object.defineProperty(o, k2, desc);
|
|
12
|
+
}) : (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
o[k2] = m[k];
|
|
15
|
+
}));
|
|
16
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
17
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
18
|
+
}) : function(o, v) {
|
|
19
|
+
o["default"] = v;
|
|
20
|
+
});
|
|
21
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
22
|
+
if (mod && mod.__esModule) return mod;
|
|
23
|
+
var result = {};
|
|
24
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
25
|
+
__setModuleDefault(result, mod);
|
|
26
|
+
return result;
|
|
27
|
+
};
|
|
28
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
29
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
30
|
+
};
|
|
31
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
32
|
+
exports.asynchronousBodyHandler = exports.synchronousBodyHandler = exports.MessageConsumerPact = void 0;
|
|
33
|
+
var lodash_1 = require("lodash");
|
|
34
|
+
var pact_core_1 = __importStar(require("@pact-foundation/pact-core"));
|
|
35
|
+
var ramda_1 = require("ramda");
|
|
36
|
+
var logger_1 = __importStar(require("./common/logger"));
|
|
37
|
+
var configurationError_1 = __importDefault(require("./errors/configurationError"));
|
|
38
|
+
var package_json_1 = require("../package.json");
|
|
39
|
+
var spec_1 = require("./common/spec");
|
|
40
|
+
var v3_1 = require("./v3");
|
|
41
|
+
var DEFAULT_PACT_DIR = './pacts';
|
|
42
|
+
// eslint-disable-next-line no-shadow
|
|
43
|
+
var ContentType;
|
|
44
|
+
(function (ContentType) {
|
|
45
|
+
ContentType[ContentType["JSON"] = 0] = "JSON";
|
|
46
|
+
ContentType[ContentType["BINARY"] = 1] = "BINARY";
|
|
47
|
+
ContentType[ContentType["STRING"] = 2] = "STRING";
|
|
48
|
+
})(ContentType || (ContentType = {}));
|
|
49
|
+
/**
|
|
50
|
+
* A Message Consumer is analagous to a Provider in the HTTP Interaction model.
|
|
51
|
+
* It is the receiver of an interaction, and needs to be able to handle whatever
|
|
52
|
+
* request was provided.
|
|
53
|
+
*/
|
|
54
|
+
var MessageConsumerPact = /** @class */ (function () {
|
|
55
|
+
function MessageConsumerPact(config) {
|
|
56
|
+
this.config = config;
|
|
57
|
+
this.state = {};
|
|
58
|
+
this.pact = (0, pact_core_1.makeConsumerAsyncMessagePact)(config.consumer, config.provider, (0, spec_1.numberToSpec)(config.spec, v3_1.SpecificationVersion.SPECIFICATION_VERSION_V3), config.logLevel);
|
|
59
|
+
this.pact.addMetadata('pact-js', 'version', package_json_1.version);
|
|
60
|
+
this.message = this.pact.newMessage('');
|
|
61
|
+
if (!(0, lodash_1.isEmpty)(config.logLevel)) {
|
|
62
|
+
(0, logger_1.setLogLevel)(config.logLevel);
|
|
63
|
+
pact_core_1.default.logLevel(config.logLevel);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Gives a state the provider should be in for this Message.
|
|
68
|
+
*
|
|
69
|
+
* @param {string} state - The state of the provider.
|
|
70
|
+
* @returns {Message} MessageConsumer
|
|
71
|
+
*/
|
|
72
|
+
MessageConsumerPact.prototype.given = function (state) {
|
|
73
|
+
var _this = this;
|
|
74
|
+
if (typeof state === 'string') {
|
|
75
|
+
this.message.given(state);
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
(0, ramda_1.forEachObjIndexed)(function (v, k) {
|
|
79
|
+
_this.message.givenWithParam(state.name, "".concat(k), JSON.stringify(v));
|
|
80
|
+
}, state.params);
|
|
81
|
+
}
|
|
82
|
+
return this;
|
|
83
|
+
};
|
|
84
|
+
/**
|
|
85
|
+
* A free style description of the Message.
|
|
86
|
+
*
|
|
87
|
+
* @param {string} description - A description of the Message to be received
|
|
88
|
+
* @returns {Message} MessageConsumer
|
|
89
|
+
*/
|
|
90
|
+
MessageConsumerPact.prototype.expectsToReceive = function (description) {
|
|
91
|
+
if ((0, lodash_1.isEmpty)(description)) {
|
|
92
|
+
throw new configurationError_1.default('You must provide a description for the Message.');
|
|
93
|
+
}
|
|
94
|
+
this.message.expectsToReceive(description);
|
|
95
|
+
return this;
|
|
96
|
+
};
|
|
97
|
+
/**
|
|
98
|
+
* The JSON object to be received by the message consumer.
|
|
99
|
+
*
|
|
100
|
+
* May be a JSON object or JSON primitive. The contents must be able to be properly
|
|
101
|
+
* strigified and parse (i.e. via JSON.stringify and JSON.parse).
|
|
102
|
+
*
|
|
103
|
+
* @param {string} content - A description of the Message to be received
|
|
104
|
+
* @returns {Message} MessageConsumer
|
|
105
|
+
*/
|
|
106
|
+
MessageConsumerPact.prototype.withContent = function (content) {
|
|
107
|
+
if ((0, lodash_1.isEmpty)(content)) {
|
|
108
|
+
throw new configurationError_1.default('You must provide a valid JSON document or primitive for the Message.');
|
|
109
|
+
}
|
|
110
|
+
this.message.withContents(JSON.stringify(content), 'application/json');
|
|
111
|
+
this.state.contentType = ContentType.JSON;
|
|
112
|
+
return this;
|
|
113
|
+
};
|
|
114
|
+
/**
|
|
115
|
+
* The text content to be received by the message consumer.
|
|
116
|
+
*
|
|
117
|
+
* May be any text
|
|
118
|
+
*
|
|
119
|
+
* @param {string} content - A description of the Message to be received
|
|
120
|
+
* @returns {Message} MessageConsumer
|
|
121
|
+
*/
|
|
122
|
+
MessageConsumerPact.prototype.withTextContent = function (content, contentType) {
|
|
123
|
+
this.message.withContents(content, contentType);
|
|
124
|
+
this.state.contentType = ContentType.STRING;
|
|
125
|
+
return this;
|
|
126
|
+
};
|
|
127
|
+
/**
|
|
128
|
+
* The binary content to be received by the message consumer.
|
|
129
|
+
*
|
|
130
|
+
* Content will be stored in base64 in the resulting pact file.
|
|
131
|
+
*
|
|
132
|
+
* @param {Buffer} content - A buffer containing the binary content
|
|
133
|
+
* @param {String} contenttype - The mime type of the content to expect
|
|
134
|
+
* @returns {Message} MessageConsumer
|
|
135
|
+
*/
|
|
136
|
+
MessageConsumerPact.prototype.withBinaryContent = function (content, contentType) {
|
|
137
|
+
this.message.withBinaryContents(content, contentType);
|
|
138
|
+
this.state.contentType = ContentType.BINARY;
|
|
139
|
+
return this;
|
|
140
|
+
};
|
|
141
|
+
/**
|
|
142
|
+
* Message metadata.
|
|
143
|
+
*
|
|
144
|
+
* @param {string} metadata -
|
|
145
|
+
* @returns {Message} MessageConsumer
|
|
146
|
+
*/
|
|
147
|
+
MessageConsumerPact.prototype.withMetadata = function (metadata) {
|
|
148
|
+
var _this = this;
|
|
149
|
+
if ((0, lodash_1.isEmpty)(metadata)) {
|
|
150
|
+
throw new configurationError_1.default('You must provide valid metadata for the Message, or none at all');
|
|
151
|
+
}
|
|
152
|
+
(0, ramda_1.forEachObjIndexed)(function (v, k) {
|
|
153
|
+
_this.message.withMetadata("".concat(k), typeof v === 'string' ? v : v.getValue());
|
|
154
|
+
}, metadata);
|
|
155
|
+
return this;
|
|
156
|
+
};
|
|
157
|
+
/**
|
|
158
|
+
* Creates a new Pact _message_ interaction to build a testable interaction.
|
|
159
|
+
*
|
|
160
|
+
* @param handler A message handler, that must be able to consume the given Message
|
|
161
|
+
* @returns {Promise}
|
|
162
|
+
*/
|
|
163
|
+
MessageConsumerPact.prototype.verify = function (handler) {
|
|
164
|
+
var _this = this;
|
|
165
|
+
logger_1.default.info('Verifying message');
|
|
166
|
+
return handler(this.reifiedContent())
|
|
167
|
+
.then(function () {
|
|
168
|
+
var _a;
|
|
169
|
+
_this.pact.writePactFile((_a = _this.config.dir) !== null && _a !== void 0 ? _a : DEFAULT_PACT_DIR, _this.config.pactfileWriteMode === 'overwrite');
|
|
170
|
+
})
|
|
171
|
+
.finally(function () {
|
|
172
|
+
_this.message = _this.pact.newMessage('');
|
|
173
|
+
_this.state = {};
|
|
174
|
+
});
|
|
175
|
+
};
|
|
176
|
+
MessageConsumerPact.prototype.reifiedContent = function () {
|
|
177
|
+
var raw = this.message.reifyMessage();
|
|
178
|
+
logger_1.default.debug("reified message raw: raw");
|
|
179
|
+
var reified = JSON.parse(raw);
|
|
180
|
+
if (this.state.contentType === ContentType.BINARY) {
|
|
181
|
+
reified.contents = Buffer.from(reified.contents, 'base64');
|
|
182
|
+
}
|
|
183
|
+
logger_1.default.debug("rehydrated message body into correct type: ".concat(reified.contents));
|
|
184
|
+
return reified;
|
|
185
|
+
};
|
|
186
|
+
/**
|
|
187
|
+
* Returns the Message object created.
|
|
188
|
+
*
|
|
189
|
+
* @returns {Message}
|
|
190
|
+
*/
|
|
191
|
+
MessageConsumerPact.prototype.json = function () {
|
|
192
|
+
return this.state;
|
|
193
|
+
};
|
|
194
|
+
return MessageConsumerPact;
|
|
195
|
+
}());
|
|
196
|
+
exports.MessageConsumerPact = MessageConsumerPact;
|
|
197
|
+
// TODO: create more basic adapters for API handlers
|
|
198
|
+
// bodyHandler takes a synchronous function and returns
|
|
199
|
+
// a wrapped function that accepts a Message and returns a Promise
|
|
200
|
+
function synchronousBodyHandler(handler) {
|
|
201
|
+
return function (m) {
|
|
202
|
+
var body = m.contents;
|
|
203
|
+
return new Promise(function (resolve, reject) {
|
|
204
|
+
try {
|
|
205
|
+
var res = handler(body);
|
|
206
|
+
resolve(res);
|
|
207
|
+
}
|
|
208
|
+
catch (e) {
|
|
209
|
+
reject(e);
|
|
210
|
+
}
|
|
211
|
+
});
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
exports.synchronousBodyHandler = synchronousBodyHandler;
|
|
215
|
+
// bodyHandler takes an asynchronous (promisified) function and returns
|
|
216
|
+
// a wrapped function that accepts a Message and returns a Promise
|
|
217
|
+
// TODO: move this into its own package and re-export?
|
|
218
|
+
function asynchronousBodyHandler(handler) {
|
|
219
|
+
return function (m) { return handler(m.contents); };
|
|
220
|
+
}
|
|
221
|
+
exports.asynchronousBodyHandler = asynchronousBodyHandler;
|
|
222
|
+
//# sourceMappingURL=messageConsumerPact.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messageConsumerPact.js","sourceRoot":"","sources":["../../src/messageConsumerPact.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
/* tslint:disable:no-unused-expression no-empty */
|
|
7
|
+
var chai_1 = __importDefault(require("chai"));
|
|
8
|
+
var chai_as_promised_1 = __importDefault(require("chai-as-promised"));
|
|
9
|
+
var sinon_chai_1 = __importDefault(require("sinon-chai"));
|
|
10
|
+
var messageConsumerPact_1 = require("./messageConsumerPact");
|
|
11
|
+
chai_1.default.use(sinon_chai_1.default);
|
|
12
|
+
chai_1.default.use(chai_as_promised_1.default);
|
|
13
|
+
var expect = chai_1.default.expect;
|
|
14
|
+
describe('MessageConsumer', function () {
|
|
15
|
+
var consumer;
|
|
16
|
+
beforeEach(function () {
|
|
17
|
+
consumer = new messageConsumerPact_1.MessageConsumerPact({
|
|
18
|
+
consumer: 'myconsumer',
|
|
19
|
+
provider: 'myprovider',
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
var testMessage = {
|
|
23
|
+
contents: {
|
|
24
|
+
foo: 'bar',
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
describe('#constructor', function () {
|
|
28
|
+
it('creates a Consumer when all mandatory parameters are provided', function () {
|
|
29
|
+
expect(consumer).to.be.a('object');
|
|
30
|
+
expect(consumer).to.respondTo('verify');
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
describe('#dsl', function () {
|
|
34
|
+
describe('when an empty description has been given', function () {
|
|
35
|
+
it('it should throw an error', function () {
|
|
36
|
+
expect(function () {
|
|
37
|
+
consumer.expectsToReceive('');
|
|
38
|
+
}).to.throw(Error);
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
describe('when an empty content object has been given', function () {
|
|
42
|
+
it('it should throw an error', function () {
|
|
43
|
+
expect(function () {
|
|
44
|
+
consumer.withContent({});
|
|
45
|
+
}).to.throw(Error);
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
describe('when an empty metadata object has been given', function () {
|
|
49
|
+
it('it should throw an error', function () {
|
|
50
|
+
expect(function () {
|
|
51
|
+
consumer.withMetadata({});
|
|
52
|
+
}).to.throw(Error);
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
describe('#verify', function () {
|
|
57
|
+
describe('when given a valid handler and message', function () {
|
|
58
|
+
it('verifies the consumer message', function () {
|
|
59
|
+
var stubbedConsumer = new messageConsumerPact_1.MessageConsumerPact({
|
|
60
|
+
consumer: 'myconsumer',
|
|
61
|
+
provider: 'myprovider',
|
|
62
|
+
});
|
|
63
|
+
var stub = stubbedConsumer;
|
|
64
|
+
// Stub out service factory
|
|
65
|
+
stub.getServiceFactory = function () { return ({
|
|
66
|
+
createMessage: function () { return Promise.resolve('message created'); },
|
|
67
|
+
}); };
|
|
68
|
+
stubbedConsumer
|
|
69
|
+
.given('some state')
|
|
70
|
+
.expectsToReceive('A message about something')
|
|
71
|
+
.withContent({ foo: 'bar' })
|
|
72
|
+
.withMetadata({ baz: 'bat' });
|
|
73
|
+
return expect(stubbedConsumer.verify(function () { return Promise.resolve('yay!'); })).to
|
|
74
|
+
.eventually.be.fulfilled;
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
describe('handler transformers', function () {
|
|
79
|
+
describe('#asynchronousbodyHandler', function () {
|
|
80
|
+
describe('when given a function that succeeds', function () {
|
|
81
|
+
it('returns a Handler object that returns a completed promise', function () {
|
|
82
|
+
var failFn = function () { return Promise.resolve('yay!'); };
|
|
83
|
+
var hFn = (0, messageConsumerPact_1.asynchronousBodyHandler)(failFn);
|
|
84
|
+
return expect(hFn(testMessage)).to.eventually.be.fulfilled;
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
describe('when given a function that throws an Exception', function () {
|
|
88
|
+
it('returns a Handler object that returns a rejected promise', function () {
|
|
89
|
+
var failFn = function () { return Promise.reject(new Error('fail')); };
|
|
90
|
+
var hFn = (0, messageConsumerPact_1.asynchronousBodyHandler)(failFn);
|
|
91
|
+
return expect(hFn(testMessage)).to.eventually.be.rejected;
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
describe('#synchronousbodyHandler', function () {
|
|
96
|
+
describe('when given a function that succeeds', function () {
|
|
97
|
+
it('returns a Handler object that returns a completed promise', function () {
|
|
98
|
+
var failFn = function () {
|
|
99
|
+
/* do nothing! */
|
|
100
|
+
};
|
|
101
|
+
var hFn = (0, messageConsumerPact_1.synchronousBodyHandler)(failFn);
|
|
102
|
+
return expect(hFn(testMessage)).to.eventually.be.fulfilled;
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
describe('when given a function that throws an Exception', function () {
|
|
106
|
+
it('returns a Handler object that returns a rejected promise', function () {
|
|
107
|
+
var failFn = function () {
|
|
108
|
+
throw new Error('fail');
|
|
109
|
+
};
|
|
110
|
+
var hFn = (0, messageConsumerPact_1.synchronousBodyHandler)(failFn);
|
|
111
|
+
return expect(hFn(testMessage)).to.eventually.be.rejected;
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
});
|
|
116
|
+
});
|
|
117
|
+
//# sourceMappingURL=messageConsumerPact.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messageConsumerPact.spec.js","sourceRoot":"","sources":["../../src/messageConsumerPact.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @module Message
|
|
3
3
|
*/
|
|
4
|
-
import
|
|
4
|
+
import * as http from 'http';
|
|
5
|
+
import { MessageProvider } from './dsl/message';
|
|
6
|
+
import { PactMessageProviderOptions } from './dsl/options';
|
|
7
|
+
export declare const waitForServerReady: (server: http.Server) => Promise<http.Server>;
|
|
8
|
+
export declare const setupProxyServer: (app: (request: http.IncomingMessage, response: http.ServerResponse) => void) => http.Server;
|
|
9
|
+
export declare const providerWithMetadata: (provider: MessageProvider, metadata: Record<string, string>) => MessageProvider;
|
|
5
10
|
/**
|
|
6
11
|
* A Message Provider is analagous to Consumer in the HTTP Interaction model.
|
|
7
12
|
*
|
|
@@ -14,11 +19,9 @@ export declare class MessageProviderPact {
|
|
|
14
19
|
/**
|
|
15
20
|
* Verify a Message Provider.
|
|
16
21
|
*/
|
|
17
|
-
verify(): Promise<
|
|
18
|
-
private waitForServerReady;
|
|
22
|
+
verify(): Promise<unknown>;
|
|
19
23
|
private runProviderVerification;
|
|
20
24
|
private setupVerificationHandler;
|
|
21
|
-
private setupProxyServer;
|
|
22
25
|
private setupProxyApplication;
|
|
23
26
|
private setupStates;
|
|
24
27
|
private findHandler;
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @module Message
|
|
4
|
+
*/
|
|
5
|
+
var __assign = (this && this.__assign) || function () {
|
|
6
|
+
__assign = Object.assign || function(t) {
|
|
7
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
8
|
+
s = arguments[i];
|
|
9
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
10
|
+
t[p] = s[p];
|
|
11
|
+
}
|
|
12
|
+
return t;
|
|
13
|
+
};
|
|
14
|
+
return __assign.apply(this, arguments);
|
|
15
|
+
};
|
|
16
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
17
|
+
if (k2 === undefined) k2 = k;
|
|
18
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
19
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
20
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
21
|
+
}
|
|
22
|
+
Object.defineProperty(o, k2, desc);
|
|
23
|
+
}) : (function(o, m, k, k2) {
|
|
24
|
+
if (k2 === undefined) k2 = k;
|
|
25
|
+
o[k2] = m[k];
|
|
26
|
+
}));
|
|
27
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
28
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
29
|
+
}) : function(o, v) {
|
|
30
|
+
o["default"] = v;
|
|
31
|
+
});
|
|
32
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
33
|
+
if (mod && mod.__esModule) return mod;
|
|
34
|
+
var result = {};
|
|
35
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
36
|
+
__setModuleDefault(result, mod);
|
|
37
|
+
return result;
|
|
38
|
+
};
|
|
39
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
40
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
41
|
+
};
|
|
42
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
43
|
+
exports.MessageProviderPact = exports.providerWithMetadata = exports.setupProxyServer = exports.waitForServerReady = void 0;
|
|
44
|
+
var lodash_1 = require("lodash");
|
|
45
|
+
var pact_core_1 = __importDefault(require("@pact-foundation/pact-core"));
|
|
46
|
+
var express_1 = __importDefault(require("express"));
|
|
47
|
+
var http = __importStar(require("http"));
|
|
48
|
+
var body_parser_1 = __importDefault(require("body-parser"));
|
|
49
|
+
var js_base64_1 = require("js-base64");
|
|
50
|
+
var logger_1 = __importStar(require("./common/logger"));
|
|
51
|
+
// Listens for the server start event
|
|
52
|
+
// Converts event Emitter to a Promise
|
|
53
|
+
var waitForServerReady = function (server) {
|
|
54
|
+
return new Promise(function (resolve, reject) {
|
|
55
|
+
server.on('listening', function () { return resolve(server); });
|
|
56
|
+
server.on('error', function () { return reject(); });
|
|
57
|
+
});
|
|
58
|
+
};
|
|
59
|
+
exports.waitForServerReady = waitForServerReady;
|
|
60
|
+
// Get the Proxy we'll pass to the CLI for verification
|
|
61
|
+
var setupProxyServer = function (app) { return http.createServer(app).listen(); };
|
|
62
|
+
exports.setupProxyServer = setupProxyServer;
|
|
63
|
+
var hasMetadata = function (o) {
|
|
64
|
+
return Boolean(o.__pactMessageMetadata);
|
|
65
|
+
};
|
|
66
|
+
var providerWithMetadata = function (provider, metadata) {
|
|
67
|
+
return function (descriptor) {
|
|
68
|
+
return Promise.resolve(provider(descriptor)).then(function (message) {
|
|
69
|
+
return hasMetadata(message)
|
|
70
|
+
? {
|
|
71
|
+
__pactMessageMetadata: __assign(__assign({}, message.__pactMessageMetadata), metadata),
|
|
72
|
+
message: message,
|
|
73
|
+
}
|
|
74
|
+
: { __pactMessageMetadata: metadata, message: message };
|
|
75
|
+
});
|
|
76
|
+
};
|
|
77
|
+
};
|
|
78
|
+
exports.providerWithMetadata = providerWithMetadata;
|
|
79
|
+
/**
|
|
80
|
+
* A Message Provider is analagous to Consumer in the HTTP Interaction model.
|
|
81
|
+
*
|
|
82
|
+
* It is the initiator of an interaction, and expects something on the other end
|
|
83
|
+
* of the interaction to respond - just in this case, not immediately.
|
|
84
|
+
*/
|
|
85
|
+
var MessageProviderPact = /** @class */ (function () {
|
|
86
|
+
function MessageProviderPact(config) {
|
|
87
|
+
this.config = config;
|
|
88
|
+
if (config.logLevel && !(0, lodash_1.isEmpty)(config.logLevel)) {
|
|
89
|
+
pact_core_1.default.logLevel(config.logLevel);
|
|
90
|
+
(0, logger_1.setLogLevel)(config.logLevel);
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
(0, logger_1.setLogLevel)();
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Verify a Message Provider.
|
|
98
|
+
*/
|
|
99
|
+
MessageProviderPact.prototype.verify = function () {
|
|
100
|
+
logger_1.default.info('Verifying message');
|
|
101
|
+
// Start the verification CLI proxy server
|
|
102
|
+
var app = this.setupProxyApplication();
|
|
103
|
+
var server = (0, exports.setupProxyServer)(app);
|
|
104
|
+
// Run the verification once the proxy server is available
|
|
105
|
+
return (0, exports.waitForServerReady)(server)
|
|
106
|
+
.then(this.runProviderVerification())
|
|
107
|
+
.then(function (result) {
|
|
108
|
+
server.close();
|
|
109
|
+
return result;
|
|
110
|
+
}, function (err) {
|
|
111
|
+
server.close();
|
|
112
|
+
throw err;
|
|
113
|
+
});
|
|
114
|
+
};
|
|
115
|
+
// Run the Verification CLI process
|
|
116
|
+
MessageProviderPact.prototype.runProviderVerification = function () {
|
|
117
|
+
var _this = this;
|
|
118
|
+
return function (server) {
|
|
119
|
+
var opts = __assign(__assign({}, (0, lodash_1.omit)(_this.config, 'handlers')), { providerBaseUrl: "http://localhost:".concat(server.address().port) });
|
|
120
|
+
return pact_core_1.default.verifyPacts(opts);
|
|
121
|
+
};
|
|
122
|
+
};
|
|
123
|
+
// Get the API handler for the verification CLI process to invoke on POST /*
|
|
124
|
+
MessageProviderPact.prototype.setupVerificationHandler = function () {
|
|
125
|
+
var _this = this;
|
|
126
|
+
return function (req, res) {
|
|
127
|
+
var message = req.body;
|
|
128
|
+
// Invoke the handler, and return the JSON response body
|
|
129
|
+
// wrapped in a Message
|
|
130
|
+
_this.setupStates(message)
|
|
131
|
+
.then(function () { return _this.findHandler(message); })
|
|
132
|
+
.then(function (handler) { return handler(message); })
|
|
133
|
+
.then(function (messageFromHandler) {
|
|
134
|
+
if (hasMetadata(messageFromHandler)) {
|
|
135
|
+
var metadata = (0, js_base64_1.encode)(JSON.stringify(messageFromHandler.__pactMessageMetadata));
|
|
136
|
+
res.header('Pact-Message-Metadata', metadata);
|
|
137
|
+
res.header('PACT_MESSAGE_METADATA', metadata);
|
|
138
|
+
return res.json(messageFromHandler.message);
|
|
139
|
+
}
|
|
140
|
+
return res.json(messageFromHandler);
|
|
141
|
+
})
|
|
142
|
+
.catch(function (e) { return res.status(500).send(e); });
|
|
143
|
+
};
|
|
144
|
+
};
|
|
145
|
+
// Get the Express app that will run on the HTTP Proxy
|
|
146
|
+
MessageProviderPact.prototype.setupProxyApplication = function () {
|
|
147
|
+
var app = (0, express_1.default)();
|
|
148
|
+
app.use(body_parser_1.default.json());
|
|
149
|
+
app.use(body_parser_1.default.urlencoded({ extended: true }));
|
|
150
|
+
app.use(function (req, res, next) {
|
|
151
|
+
// TODO: this seems to override the metadata for content-type
|
|
152
|
+
res.header('Content-Type', 'application/json; charset=utf-8');
|
|
153
|
+
next();
|
|
154
|
+
});
|
|
155
|
+
// Proxy server will respond to Verifier process
|
|
156
|
+
app.all('/*', this.setupVerificationHandler());
|
|
157
|
+
return app;
|
|
158
|
+
};
|
|
159
|
+
// Lookup the handler based on the description, or get the default handler
|
|
160
|
+
MessageProviderPact.prototype.setupStates = function (message) {
|
|
161
|
+
var _this = this;
|
|
162
|
+
var promises = [];
|
|
163
|
+
if (message.providerStates) {
|
|
164
|
+
message.providerStates.forEach(function (state) {
|
|
165
|
+
var handler = _this.config.stateHandlers
|
|
166
|
+
? _this.config.stateHandlers[state.name]
|
|
167
|
+
: null;
|
|
168
|
+
if (handler) {
|
|
169
|
+
promises.push(handler(state.name, state.params));
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
logger_1.default.warn("no state handler found for \"".concat(state.name, "\", ignoring"));
|
|
173
|
+
}
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
return Promise.all(promises);
|
|
177
|
+
};
|
|
178
|
+
// Lookup the handler based on the description, or get the default handler
|
|
179
|
+
MessageProviderPact.prototype.findHandler = function (message) {
|
|
180
|
+
var handler = this.config.messageProviders[message.description || ''];
|
|
181
|
+
if (!handler) {
|
|
182
|
+
logger_1.default.error("no handler found for message ".concat(message.description));
|
|
183
|
+
return Promise.reject(new Error("No handler found for message \"".concat(message.description, "\".\n Check your \"handlers\" configuration")));
|
|
184
|
+
}
|
|
185
|
+
return Promise.resolve(handler);
|
|
186
|
+
};
|
|
187
|
+
return MessageProviderPact;
|
|
188
|
+
}());
|
|
189
|
+
exports.MessageProviderPact = MessageProviderPact;
|
|
190
|
+
//# sourceMappingURL=messageProviderPact.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messageProviderPact.js","sourceRoot":"","sources":["../../src/messageProviderPact.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|