@pact-foundation/pact 10.0.0-beta.40 → 10.0.0-beta.44
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 +41 -0
- package/README.md +45 -43
- package/package.json +1 -1
- package/src/dsl/verifier/proxy/proxy.js +1 -1
- package/src/dsl/verifier/proxy/proxy.js.map +1 -1
- package/src/dsl/verifier/proxy/stateHandler/setupStates.d.ts +3 -2
- package/src/dsl/verifier/proxy/stateHandler/setupStates.js +35 -12
- package/src/dsl/verifier/proxy/stateHandler/setupStates.js.map +1 -1
- package/src/dsl/verifier/proxy/stateHandler/setupStates.spec.js +102 -39
- package/src/dsl/verifier/proxy/stateHandler/setupStates.spec.js.map +1 -1
- package/src/dsl/verifier/proxy/stateHandler/stateHandler.js +1 -1
- package/src/dsl/verifier/proxy/stateHandler/stateHandler.js.map +1 -1
- package/src/dsl/verifier/proxy/stateHandler/stateHandler.spec.js +64 -14
- package/src/dsl/verifier/proxy/stateHandler/stateHandler.spec.js.map +1 -1
- package/src/dsl/verifier/proxy/tracer.js +2 -2
- package/src/dsl/verifier/proxy/tracer.js.map +1 -1
- package/src/dsl/verifier/proxy/types.d.ts +33 -5
- package/src/dsl/verifier/verifier.spec.js +1 -1
- package/src/dsl/verifier/verifier.spec.js.map +1 -1
- package/src/v3/pact.d.ts +4 -2
- package/src/v3/pact.js +8 -1
- package/src/v3/pact.js.map +1 -1
- package/src/v3/verifier.d.ts +11 -12
- package/src/v3/verifier.js +94 -35
- package/src/v3/verifier.js.map +1 -1
- package/src/v3/verifier.spec.js +22 -19
- package/src/v3/verifier.spec.js.map +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,47 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
|
4
4
|
|
|
5
|
+
## [10.0.0-beta.44](https://github.com/pact-foundation/pact-js/compare/v10.0.0-beta.43...v10.0.0-beta.44) (2021-07-22)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Fixes and Improvements
|
|
9
|
+
|
|
10
|
+
* consumerVersionTags were overwritten with empty array ([#714](https://github.com/pact-foundation/pact-js/issues/714)) ([838d1cb](https://github.com/pact-foundation/pact-js/commit/838d1cbc8730592518abff16733a9a703437abb7))
|
|
11
|
+
|
|
12
|
+
## [10.0.0-beta.43](https://github.com/pact-foundation/pact-js/compare/v10.0.0-beta.42...v10.0.0-beta.43) (2021-07-18)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
### Fixes and Improvements
|
|
16
|
+
|
|
17
|
+
* return correct data type in fromProviderState ([#710](https://github.com/pact-foundation/pact-js/issues/710)) ([ec9192f](https://github.com/pact-foundation/pact-js/commit/ec9192fb44986b001634b8c44c877a8e3dd29c64)), closes [#633](https://github.com/pact-foundation/pact-js/issues/633)
|
|
18
|
+
|
|
19
|
+
## [10.0.0-beta.42](https://github.com/pact-foundation/pact-js/compare/v10.0.0-beta.41...v10.0.0-beta.42) (2021-06-29)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
### Features
|
|
23
|
+
|
|
24
|
+
* reset consumer test state to enable re-use of PactV3 class ([0134ea8](https://github.com/pact-foundation/pact-js/commit/0134ea8252b49a1639fdd78be4fe16283e1a7d70))
|
|
25
|
+
|
|
26
|
+
## [10.0.0-beta.41](https://github.com/pact-foundation/pact-js/compare/v10.0.0-beta.40...v10.0.0-beta.41) (2021-06-26)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
### ⚠ BREAKING CHANGES
|
|
30
|
+
|
|
31
|
+
* the signature of state handlers has been updated to
|
|
32
|
+
accept either a single function with parameters, or an object that
|
|
33
|
+
can specify optional teardown and setup functions that run on the
|
|
34
|
+
different state phases.
|
|
35
|
+
* callbackTimeout is now timeout
|
|
36
|
+
|
|
37
|
+
### Features
|
|
38
|
+
|
|
39
|
+
* support promises in filters + state handlers ([456567c](https://github.com/pact-foundation/pact-js/commit/456567c83a5f155381eebb7dd3f6b60d3bc0060b))
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
### Fixes and Improvements
|
|
43
|
+
|
|
44
|
+
* Make request tracer log in debug instead of trace ([24742e4](https://github.com/pact-foundation/pact-js/commit/24742e4c3d314de346e7fe430da2078cb475d7b1))
|
|
45
|
+
|
|
5
46
|
## [10.0.0-beta.40](https://github.com/pact-foundation/pact-js/compare/v10.0.0-beta.39...v10.0.0-beta.40) (2021-06-24)
|
|
6
47
|
|
|
7
48
|
|
package/README.md
CHANGED
|
@@ -64,6 +64,7 @@ Read [Getting started with Pact] for more information for beginners.
|
|
|
64
64
|
- [Match based on type](#match-based-on-type)
|
|
65
65
|
- [Match based on arrays](#match-based-on-arrays)
|
|
66
66
|
- [Match by regular expression](#match-by-regular-expression)
|
|
67
|
+
- [A note about typescript](#a-note-about-typescript)
|
|
67
68
|
- [GraphQL API](#graphql-api)
|
|
68
69
|
- [Tutorial (60 minutes)](#tutorial-60-minutes)
|
|
69
70
|
- [Examples](#examples)
|
|
@@ -325,7 +326,7 @@ new Verifier(opts).verifyProvider().then(function () {
|
|
|
325
326
|
| `pactUrls` | false | array | Array of local pact file paths or HTTP-based URLs. Required if _not_ using a Pact Broker. |
|
|
326
327
|
| `providerStatesSetupUrl` | false | string | Deprecated (use URL to send PUT requests to setup a given provider state |
|
|
327
328
|
| `stateHandlers` | false | object | Map of "state" to a function that sets up a given provider state. See docs below for more information |
|
|
328
|
-
| `requestFilter` | false | function | Function that may be used to alter the incoming request or outgoing response from the verification process. See below for use. |
|
|
329
|
+
| `requestFilter` | false | function ([Express middleware](https://expressjs.com/en/guide/using-middleware.html)) | Function that may be used to alter the incoming request or outgoing response from the verification process. See below for use. |
|
|
329
330
|
| `beforeEach` | false | function | Function to execute prior to each interaction being validated |
|
|
330
331
|
| `afterEach` | false | function | Function to execute after each interaction has been validated |
|
|
331
332
|
| `pactBrokerUsername` | false | string | Username for Pact Broker basic authentication |
|
|
@@ -1096,21 +1097,15 @@ Then when the provider is verified, the provider state callback can return a map
|
|
|
1096
1097
|
For example:
|
|
1097
1098
|
|
|
1098
1099
|
```js
|
|
1099
|
-
|
|
1100
|
-
|
|
1101
|
-
|
|
1102
|
-
|
|
1103
|
-
|
|
1104
|
-
|
|
1105
|
-
|
|
1106
|
-
return null
|
|
1107
|
-
}
|
|
1108
|
-
}
|
|
1109
|
-
},
|
|
1100
|
+
stateHandlers: {
|
|
1101
|
+
"Account Test001 exists": (params) => {
|
|
1102
|
+
const account = new Account(0, 0, "Test001", params.accountRef, new AccountNumber(0), Date.now(), Date.now())
|
|
1103
|
+
const persistedAccount = accountRepository.save(account)
|
|
1104
|
+
return { accountNumber: persistedAccount.accountNumber.id }
|
|
1105
|
+
}
|
|
1106
|
+
},
|
|
1110
1107
|
```
|
|
1111
1108
|
|
|
1112
|
-
**NOTE:** Async callbacks and returning promises from the provider state callbacks is not currently supported.
|
|
1113
|
-
|
|
1114
1109
|
### Using Pact with XML
|
|
1115
1110
|
|
|
1116
1111
|
You can write both consumer and provider verification tests with XML requests or responses. For an example, see [examples/v3/todo-consumer/test/consumer.spec.js](https://github.com/pact-foundation/pact-js/blob/feat/v3.0.0/examples/v3/todo-consumer/test/consumer.spec.js).
|
|
@@ -1173,7 +1168,7 @@ The `VerifierV3` class can verify your provider in a similar way to the existing
|
|
|
1173
1168
|
| `callbackTimeout` | false | number | Timeout in milliseconds for request filters and provider state handlers to execute within |
|
|
1174
1169
|
| `publishVerificationResult` | false | boolean | Publish verification result to Broker (_NOTE_: you should only enable this during CI builds) |
|
|
1175
1170
|
| `providerVersion` | false | string | Provider version, required to publish verification result to Broker. Optional otherwise. |
|
|
1176
|
-
| `requestFilter
|
|
1171
|
+
| `requestFilter` | false | function ([Express middleware](https://expressjs.com/en/guide/using-middleware.html)) | |
|
|
1177
1172
|
| `stateHandlers` | false | object | Map of "state" to a function that sets up a given provider state. See docs [below](#provider-state-callbacks) for more information |
|
|
1178
1173
|
| `consumerVersionTags` | false | string\|array | Retrieve the latest pacts with given tag(s) |
|
|
1179
1174
|
| `providerVersionTags` | false | string\|array | Tag(s) to apply to the provider application |
|
|
@@ -1186,57 +1181,64 @@ The `VerifierV3` class can verify your provider in a similar way to the existing
|
|
|
1186
1181
|
|
|
1187
1182
|
#### Request Filters
|
|
1188
1183
|
|
|
1189
|
-
Request filters
|
|
1184
|
+
Request filters are simple [Express middleware functions](https://expressjs.com/en/guide/using-middleware.html):
|
|
1190
1185
|
|
|
1191
1186
|
```javascript
|
|
1192
|
-
requestFilter: req => {
|
|
1187
|
+
requestFilter: (req, res, next) => {
|
|
1193
1188
|
req.headers["MY_SPECIAL_HEADER"] = "my special value"
|
|
1194
1189
|
|
|
1195
1190
|
// e.g. ADD Bearer token
|
|
1196
1191
|
req.headers["authorization"] = `Bearer ${token}`
|
|
1197
1192
|
|
|
1198
|
-
// Need to
|
|
1199
|
-
|
|
1193
|
+
// Need to call the next middleware in the chain
|
|
1194
|
+
next()
|
|
1200
1195
|
},
|
|
1201
1196
|
```
|
|
1202
1197
|
|
|
1203
1198
|
#### Provider state callbacks
|
|
1204
1199
|
|
|
1205
|
-
Provider state callbacks have been updated to support parameters and return values.
|
|
1206
|
-
|
|
1207
|
-
|
|
1200
|
+
Provider state callbacks have been updated to support parameters and return values.
|
|
1201
|
+
|
|
1202
|
+
Simple callbacks run before the verification and receive optional parameters containing any key-value parameters defined in the pact file.
|
|
1203
|
+
|
|
1204
|
+
The second form of callback accepts a `setup` and `teardown` function that execute on the lifecycle of the state setup. `setup` runs prior to the test, and `teardown` runs after the actual request has been sent to the provider.
|
|
1205
|
+
|
|
1206
|
+
Provider state callbacks can also return a map of key-value values. These are used with provider-state injected values (see the section on that above).
|
|
1208
1207
|
|
|
1209
1208
|
```javascript
|
|
1210
1209
|
stateHandlers: {
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
|
|
1214
|
-
|
|
1210
|
+
// Simple state handler, runs before the verification
|
|
1211
|
+
"Has no animals": () => {
|
|
1212
|
+
return animalRepository.clear()
|
|
1213
|
+
},
|
|
1214
|
+
// Runs only on setup phase (no teardown)
|
|
1215
|
+
"Has some animals": {
|
|
1216
|
+
setup: () => {
|
|
1217
|
+
return importData()
|
|
1215
1218
|
}
|
|
1216
1219
|
},
|
|
1217
|
-
|
|
1218
|
-
|
|
1219
|
-
|
|
1220
|
-
|
|
1221
|
-
|
|
1222
|
-
|
|
1223
|
-
|
|
1220
|
+
// Runs only on teardown phase (no setup)
|
|
1221
|
+
"Has a broken dependency": {
|
|
1222
|
+
setup: () => {
|
|
1223
|
+
// make some dependency fail...
|
|
1224
|
+
return Promise.resolve()
|
|
1225
|
+
},
|
|
1226
|
+
teardown: () => {
|
|
1227
|
+
// fix the broken dependency!
|
|
1228
|
+
return Promise.resolve()
|
|
1224
1229
|
}
|
|
1225
1230
|
},
|
|
1226
|
-
|
|
1227
|
-
|
|
1228
|
-
|
|
1229
|
-
|
|
1230
|
-
|
|
1231
|
-
|
|
1232
|
-
|
|
1233
|
-
}
|
|
1231
|
+
// Return provider specific IDs
|
|
1232
|
+
"Has an animal with ID": async (parameters) => {
|
|
1233
|
+
await importData()
|
|
1234
|
+
animalRepository.first().id = parameters.id
|
|
1235
|
+
return {
|
|
1236
|
+
description: `Animal with ID ${parameters.id} added to the db`,
|
|
1237
|
+
id: parameters.id,
|
|
1234
1238
|
}
|
|
1235
1239
|
},
|
|
1236
1240
|
```
|
|
1237
1241
|
|
|
1238
|
-
**NOTE:** Async callbacks and returning promises from the provider state callbacks is not currently supported.
|
|
1239
|
-
|
|
1240
1242
|
### Debugging issues with Pact-JS V3
|
|
1241
1243
|
|
|
1242
1244
|
You can change the log levels using the `LOG_LEVEL` environment variable.
|
package/package.json
CHANGED
|
@@ -49,7 +49,7 @@ exports.createProxy = function (config, stateSetupPath) {
|
|
|
49
49
|
app.post(stateSetupPath, stateHandler_1.createProxyStateHandler(config));
|
|
50
50
|
// Proxy server will respond to Verifier process
|
|
51
51
|
app.all('/*', function (req, res) {
|
|
52
|
-
logger_1.default.debug(
|
|
52
|
+
logger_1.default.debug("Proxying " + req.path);
|
|
53
53
|
proxy.web(req, res, {
|
|
54
54
|
changeOrigin: config.changeOrigin === true,
|
|
55
55
|
secure: config.validateSSL === true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proxy.js","sourceRoot":"","sources":["../../../../../src/dsl/verifier/proxy/proxy.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oDAA8B;AAC9B,0DAAmC;AACnC,4DAAqC;AACrC,yCAA6B;AAG7B,kEAA4C;AAC5C,4DAAsE;AACtE,iCAAgE;AAChE,mCAAqE;AAErE,qCAAqC;AACxB,QAAA,kBAAkB,GAAG,UAAC,MAAmB;IACpD,OAAA,IAAI,OAAO,CAAC,UAAC,OAAO,EAAE,MAAM;QAC1B,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,cAAM,OAAA,OAAO,CAAC,MAAM,CAAC,EAAf,CAAe,CAAC,CAAC;QAC9C,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE;YACjB,OAAA,MAAM,CAAC,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAA9D,CAA8D,CAC/D,CAAC;IACJ,CAAC,CAAC;AALF,CAKE,CAAC;AAEL,uDAAuD;AAC1C,QAAA,WAAW,GAAG,UACzB,MAAoB,EACpB,cAAsB;IAEtB,IAAM,GAAG,GAAG,iBAAO,EAAE,CAAC;IACtB,IAAM,KAAK,GAAG,IAAI,oBAAS,EAAE,CAAC;IAE9B,GAAG,CAAC,GAAG,CAAC,cAAc,EAAE,qBAAU,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3C,GAAG,CAAC,GAAG,CAAC,cAAc,EAAE,qBAAU,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACnE,0BAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;IAChD,yBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;IAE/C,wBAAwB;IACxB,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,EAAE;QAC9D,gBAAM,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;QACtD,GAAG,CAAC,GAAG,CAAC,4BAAmB,EAAE,CAAC,CAAC;QAC/B,GAAG,CAAC,GAAG,CAAC,6BAAoB,EAAE,CAAC,CAAC;KACjC;IAED,8BAA8B;IAC9B,IAAI,MAAM,CAAC,aAAa,KAAK,SAAS,EAAE;QACtC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;KAC/B;IAED,+BAA+B;IAC/B,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,sCAAuB,CAAC,MAAM,CAAC,CAAC,CAAC;IAE1D,gDAAgD;IAChD,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,UAAC,GAAG,EAAE,GAAG;QACrB,gBAAM,CAAC,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"proxy.js","sourceRoot":"","sources":["../../../../../src/dsl/verifier/proxy/proxy.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oDAA8B;AAC9B,0DAAmC;AACnC,4DAAqC;AACrC,yCAA6B;AAG7B,kEAA4C;AAC5C,4DAAsE;AACtE,iCAAgE;AAChE,mCAAqE;AAErE,qCAAqC;AACxB,QAAA,kBAAkB,GAAG,UAAC,MAAmB;IACpD,OAAA,IAAI,OAAO,CAAC,UAAC,OAAO,EAAE,MAAM;QAC1B,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,cAAM,OAAA,OAAO,CAAC,MAAM,CAAC,EAAf,CAAe,CAAC,CAAC;QAC9C,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE;YACjB,OAAA,MAAM,CAAC,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAA9D,CAA8D,CAC/D,CAAC;IACJ,CAAC,CAAC;AALF,CAKE,CAAC;AAEL,uDAAuD;AAC1C,QAAA,WAAW,GAAG,UACzB,MAAoB,EACpB,cAAsB;IAEtB,IAAM,GAAG,GAAG,iBAAO,EAAE,CAAC;IACtB,IAAM,KAAK,GAAG,IAAI,oBAAS,EAAE,CAAC;IAE9B,GAAG,CAAC,GAAG,CAAC,cAAc,EAAE,qBAAU,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3C,GAAG,CAAC,GAAG,CAAC,cAAc,EAAE,qBAAU,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACnE,0BAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;IAChD,yBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;IAE/C,wBAAwB;IACxB,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,EAAE;QAC9D,gBAAM,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;QACtD,GAAG,CAAC,GAAG,CAAC,4BAAmB,EAAE,CAAC,CAAC;QAC/B,GAAG,CAAC,GAAG,CAAC,6BAAoB,EAAE,CAAC,CAAC;KACjC;IAED,8BAA8B;IAC9B,IAAI,MAAM,CAAC,aAAa,KAAK,SAAS,EAAE;QACtC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;KAC/B;IAED,+BAA+B;IAC/B,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,sCAAuB,CAAC,MAAM,CAAC,CAAC,CAAC;IAE1D,gDAAgD;IAChD,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,UAAC,GAAG,EAAE,GAAG;QACrB,gBAAM,CAAC,KAAK,CAAC,cAAY,GAAG,CAAC,IAAM,CAAC,CAAC;QAErC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE;YAClB,YAAY,EAAE,MAAM,CAAC,YAAY,KAAK,IAAI;YAC1C,MAAM,EAAE,MAAM,CAAC,WAAW,KAAK,IAAI;YACnC,MAAM,EAAE,MAAM,CAAC,eAAe;SAC/B,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;AACzC,CAAC,CAAC"}
|
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import { ProxyOptions, ProviderState } from '../types';
|
|
2
|
+
import { JsonMap } from '../../../../common/jsonTypes';
|
|
3
|
+
export declare const setupStates: (state: ProviderState, config: ProxyOptions) => Promise<void | JsonMap>;
|
|
@@ -4,20 +4,43 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
var logger_1 = __importDefault(require("../../../../common/logger"));
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
7
|
+
var isStateFuncWithSetup = function (fn) {
|
|
8
|
+
return fn.setup !== undefined ||
|
|
9
|
+
fn.teardown !== undefined;
|
|
10
|
+
};
|
|
11
|
+
// Transform a regular state function to one with the setup/teardown functions
|
|
12
|
+
var transformStateFunc = function (fn) {
|
|
13
|
+
return isStateFuncWithSetup(fn) ? fn : { setup: fn };
|
|
14
|
+
};
|
|
15
|
+
// Lookup the handler based on the description
|
|
16
|
+
exports.setupStates = function (state, config) {
|
|
17
|
+
logger_1.default.debug({ state: state }, 'setting up state');
|
|
18
|
+
var handler = config.stateHandlers
|
|
19
|
+
? config.stateHandlers[state.state]
|
|
20
|
+
: null;
|
|
21
|
+
if (!handler) {
|
|
22
|
+
if (state.action === 'setup') {
|
|
23
|
+
logger_1.default.warn("no state handler found for state: \"" + state.state + "\"");
|
|
24
|
+
}
|
|
25
|
+
return Promise.resolve();
|
|
26
|
+
}
|
|
27
|
+
var stateFn = transformStateFunc(handler);
|
|
28
|
+
switch (state.action) {
|
|
29
|
+
case 'setup':
|
|
30
|
+
if (stateFn.setup) {
|
|
31
|
+
logger_1.default.debug("setting up state '" + state.state + "'");
|
|
32
|
+
return stateFn.setup(state.params);
|
|
15
33
|
}
|
|
16
|
-
|
|
17
|
-
|
|
34
|
+
break;
|
|
35
|
+
case 'teardown':
|
|
36
|
+
if (stateFn.teardown) {
|
|
37
|
+
logger_1.default.debug("tearing down state '" + state.state + "'");
|
|
38
|
+
return stateFn.teardown(state.params);
|
|
18
39
|
}
|
|
19
|
-
|
|
40
|
+
break;
|
|
41
|
+
default:
|
|
42
|
+
logger_1.default.debug("unknown state action '" + state.action + "' received, ignoring");
|
|
20
43
|
}
|
|
21
|
-
return Promise.
|
|
44
|
+
return Promise.resolve();
|
|
22
45
|
};
|
|
23
46
|
//# sourceMappingURL=setupStates.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setupStates.js","sourceRoot":"","sources":["../../../../../../src/dsl/verifier/proxy/stateHandler/setupStates.ts"],"names":[],"mappings":";;;;;AAAA,qEAA+C;
|
|
1
|
+
{"version":3,"file":"setupStates.js","sourceRoot":"","sources":["../../../../../../src/dsl/verifier/proxy/stateHandler/setupStates.ts"],"names":[],"mappings":";;;;;AAAA,qEAA+C;AAU/C,IAAM,oBAAoB,GAAG,UAC3B,EAAkC;IAElC,OAAC,EAAyB,CAAC,KAAK,KAAK,SAAS;QAC7C,EAAyB,CAAC,QAAQ,KAAK,SAAS;AADjD,CACiD,CAAC;AAEpD,8EAA8E;AAC9E,IAAM,kBAAkB,GAAG,UAAC,EAAgB;IAC1C,OAAA,oBAAoB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;AAA7C,CAA6C,CAAC;AAEhD,8CAA8C;AACjC,QAAA,WAAW,GAAG,UACzB,KAAoB,EACpB,MAAoB;IAEpB,gBAAM,CAAC,KAAK,CAAC,EAAE,KAAK,OAAA,EAAE,EAAE,kBAAkB,CAAC,CAAC;IAE5C,IAAM,OAAO,GAAG,MAAM,CAAC,aAAa;QAClC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC;QACnC,CAAC,CAAC,IAAI,CAAC;IAET,IAAI,CAAC,OAAO,EAAE;QACZ,IAAI,KAAK,CAAC,MAAM,KAAK,OAAO,EAAE;YAC5B,gBAAM,CAAC,IAAI,CAAC,yCAAsC,KAAK,CAAC,KAAK,OAAG,CAAC,CAAC;SACnE;QACD,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;KAC1B;IAED,IAAM,OAAO,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC5C,QAAQ,KAAK,CAAC,MAAM,EAAE;QACpB,KAAK,OAAO;YACV,IAAI,OAAO,CAAC,KAAK,EAAE;gBACjB,gBAAM,CAAC,KAAK,CAAC,uBAAqB,KAAK,CAAC,KAAK,MAAG,CAAC,CAAC;gBAClD,OAAO,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;aACpC;YACD,MAAM;QACR,KAAK,UAAU;YACb,IAAI,OAAO,CAAC,QAAQ,EAAE;gBACpB,gBAAM,CAAC,KAAK,CAAC,yBAAuB,KAAK,CAAC,KAAK,MAAG,CAAC,CAAC;gBACpD,OAAO,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;aACvC;YACD,MAAM;QACR;YACE,gBAAM,CAAC,KAAK,CAAC,2BAAyB,KAAK,CAAC,MAAM,yBAAsB,CAAC,CAAC;KAC7E;IAED,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;AAC3B,CAAC,CAAC"}
|
|
@@ -1,4 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
2
13
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
14
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
15
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -47,9 +58,22 @@ var setupStates_1 = require("./setupStates");
|
|
|
47
58
|
chai_1.default.use(chai_as_promised_1.default);
|
|
48
59
|
var expect = chai_1.default.expect;
|
|
49
60
|
describe('#setupStates', function () {
|
|
50
|
-
var state =
|
|
61
|
+
var state = {
|
|
62
|
+
state: 'thing exists',
|
|
63
|
+
action: 'setup',
|
|
64
|
+
params: {},
|
|
65
|
+
};
|
|
66
|
+
var state2 = {
|
|
67
|
+
state: 'another thing exists',
|
|
68
|
+
action: 'setup',
|
|
69
|
+
params: {
|
|
70
|
+
id: 1,
|
|
71
|
+
},
|
|
72
|
+
};
|
|
51
73
|
var providerBaseUrl = 'http://not.exists';
|
|
52
74
|
var executed;
|
|
75
|
+
var setup;
|
|
76
|
+
var teardown;
|
|
53
77
|
var DEFAULT_OPTIONS = function () {
|
|
54
78
|
var _a;
|
|
55
79
|
return ({
|
|
@@ -58,9 +82,19 @@ describe('#setupStates', function () {
|
|
|
58
82
|
next();
|
|
59
83
|
},
|
|
60
84
|
stateHandlers: (_a = {},
|
|
61
|
-
_a[state] = function () {
|
|
85
|
+
_a[state.state] = function () {
|
|
62
86
|
executed = true;
|
|
63
|
-
return Promise.resolve(
|
|
87
|
+
return Promise.resolve({});
|
|
88
|
+
},
|
|
89
|
+
_a[state2.state] = {
|
|
90
|
+
setup: function (params) {
|
|
91
|
+
setup = true;
|
|
92
|
+
return Promise.resolve(params);
|
|
93
|
+
},
|
|
94
|
+
teardown: function (params) {
|
|
95
|
+
teardown = true;
|
|
96
|
+
return Promise.resolve(params);
|
|
97
|
+
},
|
|
64
98
|
},
|
|
65
99
|
_a),
|
|
66
100
|
});
|
|
@@ -69,39 +103,82 @@ describe('#setupStates', function () {
|
|
|
69
103
|
beforeEach(function () {
|
|
70
104
|
opts = DEFAULT_OPTIONS();
|
|
71
105
|
executed = false;
|
|
106
|
+
setup = false;
|
|
107
|
+
teardown = false;
|
|
72
108
|
});
|
|
73
109
|
describe('when there are provider states on the pact', function () {
|
|
74
110
|
describe('and there are handlers associated with those states', function () {
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
111
|
+
describe('that return provider state injected values', function () {
|
|
112
|
+
it('executes the handler and returns the data', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
113
|
+
var res;
|
|
114
|
+
var _a;
|
|
115
|
+
return __generator(this, function (_b) {
|
|
116
|
+
switch (_b.label) {
|
|
117
|
+
case 0:
|
|
118
|
+
opts.stateHandlers = (_a = {},
|
|
119
|
+
_a[state.state] = function () {
|
|
120
|
+
executed = true;
|
|
121
|
+
return Promise.resolve({ data: true });
|
|
122
|
+
},
|
|
123
|
+
_a);
|
|
124
|
+
return [4 /*yield*/, setupStates_1.setupStates(state, opts)];
|
|
125
|
+
case 1:
|
|
126
|
+
res = _b.sent();
|
|
127
|
+
expect(res).to.have.property('data', true);
|
|
128
|
+
expect(executed).to.be.true;
|
|
129
|
+
return [2 /*return*/];
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
}); });
|
|
133
|
+
});
|
|
134
|
+
describe('that do not return a value', function () {
|
|
135
|
+
it('executes the handler and returns an empty Promise', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
136
|
+
return __generator(this, function (_a) {
|
|
137
|
+
switch (_a.label) {
|
|
138
|
+
case 0: return [4 /*yield*/, setupStates_1.setupStates(state, opts)];
|
|
139
|
+
case 1:
|
|
140
|
+
_a.sent();
|
|
141
|
+
expect(executed).to.be.true;
|
|
142
|
+
return [2 /*return*/];
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
}); });
|
|
146
|
+
});
|
|
147
|
+
describe('that specify a setup and teardown function', function () {
|
|
148
|
+
it('executes the lifecycle specific handler and returns any provider state injected values', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
149
|
+
var res, res2;
|
|
150
|
+
return __generator(this, function (_a) {
|
|
151
|
+
switch (_a.label) {
|
|
152
|
+
case 0: return [4 /*yield*/, setupStates_1.setupStates(state2, opts)];
|
|
153
|
+
case 1:
|
|
154
|
+
res = _a.sent();
|
|
155
|
+
expect(res).to.eq(state2.params);
|
|
156
|
+
expect(setup).to.be.true;
|
|
157
|
+
expect(teardown).to.be.false;
|
|
158
|
+
setup = false;
|
|
159
|
+
return [4 /*yield*/, setupStates_1.setupStates(__assign(__assign({}, state2), { action: 'teardown' }), opts)];
|
|
160
|
+
case 2:
|
|
161
|
+
res2 = _a.sent();
|
|
162
|
+
expect(res2).to.eq(state2.params);
|
|
163
|
+
expect(teardown).to.be.true;
|
|
164
|
+
expect(setup).to.be.false;
|
|
165
|
+
return [2 /*return*/];
|
|
166
|
+
}
|
|
167
|
+
});
|
|
168
|
+
}); });
|
|
169
|
+
});
|
|
90
170
|
});
|
|
91
171
|
describe('and there are no handlers associated with those states', function () {
|
|
92
|
-
it('
|
|
93
|
-
var spy
|
|
172
|
+
it('does not execute the handler and returns an empty Promise', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
173
|
+
var spy;
|
|
94
174
|
return __generator(this, function (_a) {
|
|
95
175
|
switch (_a.label) {
|
|
96
176
|
case 0:
|
|
97
177
|
spy = sinon_1.default.spy(logger_1.default, 'warn');
|
|
98
178
|
delete opts.stateHandlers;
|
|
99
|
-
return [4 /*yield*/, setupStates_1.setupStates(
|
|
100
|
-
states: [state],
|
|
101
|
-
}, opts)];
|
|
179
|
+
return [4 /*yield*/, setupStates_1.setupStates(state, opts)];
|
|
102
180
|
case 1:
|
|
103
|
-
|
|
104
|
-
expect(res).lengthOf(0);
|
|
181
|
+
_a.sent();
|
|
105
182
|
expect(spy.callCount).to.eql(1);
|
|
106
183
|
expect(executed).to.be.false;
|
|
107
184
|
return [2 /*return*/];
|
|
@@ -110,19 +187,5 @@ describe('#setupStates', function () {
|
|
|
110
187
|
}); });
|
|
111
188
|
});
|
|
112
189
|
});
|
|
113
|
-
describe('when there are no provider states on the pact', function () {
|
|
114
|
-
it('executes the handler and returns an empty Promise', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
115
|
-
var res;
|
|
116
|
-
return __generator(this, function (_a) {
|
|
117
|
-
switch (_a.label) {
|
|
118
|
-
case 0: return [4 /*yield*/, setupStates_1.setupStates({}, opts)];
|
|
119
|
-
case 1:
|
|
120
|
-
res = _a.sent();
|
|
121
|
-
expect(res).lengthOf(0);
|
|
122
|
-
return [2 /*return*/];
|
|
123
|
-
}
|
|
124
|
-
});
|
|
125
|
-
}); });
|
|
126
|
-
});
|
|
127
190
|
});
|
|
128
191
|
//# sourceMappingURL=setupStates.spec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setupStates.spec.js","sourceRoot":"","sources":["../../../../../../src/dsl/verifier/proxy/stateHandler/setupStates.spec.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"setupStates.spec.js","sourceRoot":"","sources":["../../../../../../src/dsl/verifier/proxy/stateHandler/setupStates.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@ var setupStates_1 = require("./setupStates");
|
|
|
4
4
|
exports.createProxyStateHandler = function (config) { return function (req, res) {
|
|
5
5
|
var message = req.body;
|
|
6
6
|
return setupStates_1.setupStates(message, config)
|
|
7
|
-
.then(function () { return res.
|
|
7
|
+
.then(function (data) { return res.json(data); })
|
|
8
8
|
.catch(function (e) { return res.status(500).send(e); });
|
|
9
9
|
}; };
|
|
10
10
|
//# sourceMappingURL=stateHandler.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stateHandler.js","sourceRoot":"","sources":["../../../../../../src/dsl/verifier/proxy/stateHandler/stateHandler.ts"],"names":[],"mappings":";;AAGA,6CAA4C;AAE/B,QAAA,uBAAuB,GAAG,UAAC,MAAoB,IAAK,OAAA,UAC/D,GAAoB,EACpB,GAAqB;IAErB,IAAM,OAAO,GAAkB,GAAG,CAAC,IAAI,CAAC;IAExC,OAAO,yBAAW,CAAC,OAAO,EAAE,MAAM,CAAC;SAChC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"stateHandler.js","sourceRoot":"","sources":["../../../../../../src/dsl/verifier/proxy/stateHandler/stateHandler.ts"],"names":[],"mappings":";;AAGA,6CAA4C;AAE/B,QAAA,uBAAuB,GAAG,UAAC,MAAoB,IAAK,OAAA,UAC/D,GAAoB,EACpB,GAAqB;IAErB,IAAM,OAAO,GAAkB,GAAG,CAAC,IAAI,CAAC;IAExC,OAAO,yBAAW,CAAC,OAAO,EAAE,MAAM,CAAC;SAChC,IAAI,CAAC,UAAC,IAAI,IAAK,OAAA,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAd,CAAc,CAAC;SAC9B,KAAK,CAAC,UAAC,CAAC,IAAK,OAAA,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAvB,CAAuB,CAAC,CAAC;AAC3C,CAAC,EATgE,CAShE,CAAC"}
|
|
@@ -1,4 +1,40 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
+
function step(op) {
|
|
16
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
+
while (_) try {
|
|
18
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
+
switch (op[0]) {
|
|
21
|
+
case 0: case 1: t = op; break;
|
|
22
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
+
default:
|
|
26
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
+
if (t[2]) _.ops.pop();
|
|
31
|
+
_.trys.pop(); continue;
|
|
32
|
+
}
|
|
33
|
+
op = body.call(thisArg, _);
|
|
34
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
+
}
|
|
37
|
+
};
|
|
2
38
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
39
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
40
|
};
|
|
@@ -20,29 +56,35 @@ var expect = chai_1.default.expect;
|
|
|
20
56
|
describe('#createProxyStateHandler', function () {
|
|
21
57
|
var res;
|
|
22
58
|
var mockResponse = {
|
|
23
|
-
sendStatus: function (status) {
|
|
24
|
-
res = status;
|
|
25
|
-
},
|
|
26
59
|
status: function (status) {
|
|
27
60
|
res = status;
|
|
28
61
|
return {
|
|
29
62
|
send: function () { },
|
|
30
63
|
};
|
|
31
64
|
},
|
|
65
|
+
json: function (data) { return data; },
|
|
32
66
|
};
|
|
33
67
|
context('when valid state handlers are provided', function () {
|
|
34
68
|
beforeEach(function () {
|
|
35
|
-
sinon_1.default.stub(setupStatesModule, 'setupStates').returns(Promise.resolve());
|
|
69
|
+
sinon_1.default.stub(setupStatesModule, 'setupStates').returns(Promise.resolve({}));
|
|
36
70
|
});
|
|
37
71
|
afterEach(function () {
|
|
38
72
|
setupStatesModule.setupStates.restore();
|
|
39
73
|
});
|
|
40
|
-
it('returns a 200', function () {
|
|
41
|
-
var h
|
|
42
|
-
return
|
|
43
|
-
|
|
74
|
+
it('returns a 200', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
75
|
+
var h, data;
|
|
76
|
+
return __generator(this, function (_a) {
|
|
77
|
+
switch (_a.label) {
|
|
78
|
+
case 0:
|
|
79
|
+
h = stateHandler_1.createProxyStateHandler({});
|
|
80
|
+
return [4 /*yield*/, h({}, mockResponse)];
|
|
81
|
+
case 1:
|
|
82
|
+
data = _a.sent();
|
|
83
|
+
expect(data).to.deep.eq({});
|
|
84
|
+
return [2 /*return*/];
|
|
85
|
+
}
|
|
44
86
|
});
|
|
45
|
-
});
|
|
87
|
+
}); });
|
|
46
88
|
});
|
|
47
89
|
context('when there is a problem with a state handler', function () {
|
|
48
90
|
beforeEach(function () {
|
|
@@ -53,12 +95,20 @@ describe('#createProxyStateHandler', function () {
|
|
|
53
95
|
afterEach(function () {
|
|
54
96
|
setupStatesModule.setupStates.restore();
|
|
55
97
|
});
|
|
56
|
-
it('returns a 500', function () {
|
|
57
|
-
var h
|
|
58
|
-
return
|
|
59
|
-
|
|
98
|
+
it('returns a 500', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
99
|
+
var h;
|
|
100
|
+
return __generator(this, function (_a) {
|
|
101
|
+
switch (_a.label) {
|
|
102
|
+
case 0:
|
|
103
|
+
h = stateHandler_1.createProxyStateHandler({});
|
|
104
|
+
return [4 /*yield*/, h({}, mockResponse)];
|
|
105
|
+
case 1:
|
|
106
|
+
_a.sent();
|
|
107
|
+
expect(res).to.eql(500);
|
|
108
|
+
return [2 /*return*/];
|
|
109
|
+
}
|
|
60
110
|
});
|
|
61
|
-
});
|
|
111
|
+
}); });
|
|
62
112
|
});
|
|
63
113
|
});
|
|
64
114
|
//# sourceMappingURL=stateHandler.spec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stateHandler.spec.js","sourceRoot":"","sources":["../../../../../../src/dsl/verifier/proxy/stateHandler/stateHandler.spec.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"stateHandler.spec.js","sourceRoot":"","sources":["../../../../../../src/dsl/verifier/proxy/stateHandler/stateHandler.spec.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,8CAAwB;AACxB,sEAA8C;AAC9C,gDAAwC;AAIxC,+CAAyD;AACzD,+DAAmD;AAGnD,cAAI,CAAC,GAAG,CAAC,0BAAc,CAAC,CAAC;AAEjB,IAAA,8BAAM,CAAU;AAExB,QAAQ,CAAC,0BAA0B,EAAE;IACnC,IAAI,GAAQ,CAAC;IACb,IAAM,YAAY,GAAG;QACnB,MAAM,EAAE,UAAC,MAAc;YACrB,GAAG,GAAG,MAAM,CAAC;YACb,OAAO;gBACL,IAAI,EAAE,cAAO,CAAC;aACf,CAAC;QACJ,CAAC;QACD,IAAI,EAAE,UAAC,IAAS,IAAK,OAAA,IAAI,EAAJ,CAAI;KAC1B,CAAC;IAEF,OAAO,CAAC,wCAAwC,EAAE;QAChD,UAAU,CAAC;YACT,eAAK,CAAC,IAAI,CAAC,iBAAiB,EAAE,aAAa,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5E,CAAC,CAAC,CAAC;QACH,SAAS,CAAC;YACP,iBAAiB,CAAC,WAAwB,CAAC,OAAO,EAAE,CAAC;QACxD,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,eAAe,EAAE;;;;;wBACZ,CAAC,GAAG,sCAAuB,CAAC,EAAkB,CAAC,CAAC;wBACzC,qBAAM,CAAC,CAClB,EAAqB,EACrB,YAAgC,CACjC,EAAA;;wBAHK,IAAI,GAAG,SAGZ;wBAED,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;;;;aAC7B,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,8CAA8C,EAAE;QACtD,UAAU,CAAC;YACT,eAAK;iBACF,IAAI,CAAC,iBAAiB,EAAE,aAAa,CAAC;iBACtC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;QACH,SAAS,CAAC;YACP,iBAAiB,CAAC,WAAwB,CAAC,OAAO,EAAE,CAAC;QACxD,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,eAAe,EAAE;;;;;wBACZ,CAAC,GAAG,sCAAuB,CAAC,EAAkB,CAAC,CAAC;wBACtD,qBAAM,CAAC,CAAC,EAAqB,EAAE,YAAgC,CAAC,EAAA;;wBAAhE,SAAgE,CAAC;wBAEjE,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;;;;aACzB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -35,7 +35,7 @@ exports.createResponseTracer = function () { return function (_, res, next) {
|
|
|
35
35
|
chunks.push(Buffer.from(chunk));
|
|
36
36
|
}
|
|
37
37
|
var body = Buffer.concat(chunks).toString('utf8');
|
|
38
|
-
logger_1.default.
|
|
38
|
+
logger_1.default.debug(removeEmptyResponseProperties(body, res), 'outgoing response');
|
|
39
39
|
oldEnd.apply(res, [chunk]);
|
|
40
40
|
};
|
|
41
41
|
if (typeof next === 'function') {
|
|
@@ -43,7 +43,7 @@ exports.createResponseTracer = function () { return function (_, res, next) {
|
|
|
43
43
|
}
|
|
44
44
|
}; };
|
|
45
45
|
exports.createRequestTracer = function () { return function (req, _, next) {
|
|
46
|
-
logger_1.default.
|
|
46
|
+
logger_1.default.debug(removeEmptyRequestProperties(req), 'incoming request');
|
|
47
47
|
next();
|
|
48
48
|
}; };
|
|
49
49
|
//# sourceMappingURL=tracer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracer.js","sourceRoot":"","sources":["../../../../../src/dsl/verifier/proxy/tracer.ts"],"names":[],"mappings":";;;;;AACA,iCAA8D;AAE9D,kEAA4C;AAE5C,IAAM,6BAA6B,GAAG,UAAC,IAAY,EAAE,GAAqB;IACxE,OAAA,eAAM,CACJ;QACE,IAAI,MAAA;QACJ,OAAO,EAAE,eAAM,CACb,GAAG,CAAC,UAAU,EAAE,EAChB,UACE,GAAuD,EACvD,GAAG,EACH,KAAK;YAEL,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;YACjB,OAAO,GAAG,CAAC;QACb,CAAC,EACD,EAAE,CACH;QACD,MAAM,EAAE,GAAG,CAAC,UAAU;KACvB,EACD,iBAAQ,CACT;AAlBD,CAkBC,CAAC;AAEJ,IAAM,4BAA4B,GAAG,UAAC,GAAoB;IACxD,OAAA,eAAM,CACJ;QACE,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,IAAI,EAAE,GAAG,CAAC,IAAI;KACf,EACD,iBAAQ,CACT;AARD,CAQC,CAAC;AAES,QAAA,oBAAoB,GAAG,cAA8B,OAAA,UAChE,CAAC,EACD,GAAG,EACH,IAAI;IAEE,IAAA,yBAAyC,EAAxC,gBAAQ,EAAE,cAA8B,CAAC;IAChD,IAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,GAAG,CAAC,KAAK,GAAG,UAAC,KAAsC;QACjD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAChC,OAAO,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IACtC,CAAC,CAAC;IAEF,GAAG,CAAC,GAAG,GAAG,UAAC,KAAsC;QAC/C,IAAI,KAAK,EAAE;YACT,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;SACjC;QACD,IAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACpD,gBAAM,CAAC,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"tracer.js","sourceRoot":"","sources":["../../../../../src/dsl/verifier/proxy/tracer.ts"],"names":[],"mappings":";;;;;AACA,iCAA8D;AAE9D,kEAA4C;AAE5C,IAAM,6BAA6B,GAAG,UAAC,IAAY,EAAE,GAAqB;IACxE,OAAA,eAAM,CACJ;QACE,IAAI,MAAA;QACJ,OAAO,EAAE,eAAM,CACb,GAAG,CAAC,UAAU,EAAE,EAChB,UACE,GAAuD,EACvD,GAAG,EACH,KAAK;YAEL,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;YACjB,OAAO,GAAG,CAAC;QACb,CAAC,EACD,EAAE,CACH;QACD,MAAM,EAAE,GAAG,CAAC,UAAU;KACvB,EACD,iBAAQ,CACT;AAlBD,CAkBC,CAAC;AAEJ,IAAM,4BAA4B,GAAG,UAAC,GAAoB;IACxD,OAAA,eAAM,CACJ;QACE,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,IAAI,EAAE,GAAG,CAAC,IAAI;KACf,EACD,iBAAQ,CACT;AARD,CAQC,CAAC;AAES,QAAA,oBAAoB,GAAG,cAA8B,OAAA,UAChE,CAAC,EACD,GAAG,EACH,IAAI;IAEE,IAAA,yBAAyC,EAAxC,gBAAQ,EAAE,cAA8B,CAAC;IAChD,IAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,GAAG,CAAC,KAAK,GAAG,UAAC,KAAsC;QACjD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAChC,OAAO,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IACtC,CAAC,CAAC;IAEF,GAAG,CAAC,GAAG,GAAG,UAAC,KAAsC;QAC/C,IAAI,KAAK,EAAE;YACT,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;SACjC;QACD,IAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACpD,gBAAM,CAAC,KAAK,CAAC,6BAA6B,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,mBAAmB,CAAC,CAAC;QAC5E,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7B,CAAC,CAAC;IACF,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE;QAC9B,IAAI,EAAE,CAAC;KACR;AACH,CAAC,EAxBiE,CAwBjE,CAAC;AAEW,QAAA,mBAAmB,GAAG,cAA8B,OAAA,UAC/D,GAAG,EACH,CAAC,EACD,IAAI;IAEJ,gBAAM,CAAC,KAAK,CAAC,4BAA4B,CAAC,GAAG,CAAC,EAAE,kBAAkB,CAAC,CAAC;IACpE,IAAI,EAAE,CAAC;AACT,CAAC,EAPgE,CAOhE,CAAC"}
|
|
@@ -1,16 +1,44 @@
|
|
|
1
1
|
import express from 'express';
|
|
2
2
|
import { LogLevel } from '../../options';
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
import { JsonMap, AnyJson } from '../../../common/jsonTypes';
|
|
4
|
+
export declare type Hook = () => Promise<unknown>;
|
|
5
|
+
/**
|
|
6
|
+
* State handlers map a state description to a function
|
|
7
|
+
* that can setup the provider state
|
|
8
|
+
*/
|
|
9
|
+
export interface StateHandlers {
|
|
10
|
+
[name: string]: StateHandler;
|
|
5
11
|
}
|
|
12
|
+
/**
|
|
13
|
+
* Incoming provider state request
|
|
14
|
+
*/
|
|
6
15
|
export interface ProviderState {
|
|
7
|
-
|
|
16
|
+
action: StateAction;
|
|
17
|
+
params: JsonMap;
|
|
18
|
+
state: string;
|
|
8
19
|
}
|
|
9
|
-
|
|
20
|
+
/**
|
|
21
|
+
* Specifies whether the state handler being setup or shutdown
|
|
22
|
+
*/
|
|
23
|
+
export declare type StateAction = 'setup' | 'teardown';
|
|
24
|
+
/**
|
|
25
|
+
* Respond to the state setup event, optionally returning a map of provider
|
|
26
|
+
* values to dynamically inject into the incoming request to test
|
|
27
|
+
*/
|
|
28
|
+
export declare type StateFunc = (parameters?: AnyJson) => Promise<JsonMap | void>;
|
|
29
|
+
/**
|
|
30
|
+
* Respond to the state setup event, with the ability to hook into the setup/teardown
|
|
31
|
+
* phase of the state
|
|
32
|
+
*/
|
|
33
|
+
export declare type StateFuncWithSetup = {
|
|
34
|
+
setup?: StateFunc;
|
|
35
|
+
teardown?: StateFunc;
|
|
36
|
+
};
|
|
37
|
+
export declare type StateHandler = StateFuncWithSetup | StateFunc;
|
|
10
38
|
export interface ProxyOptions {
|
|
11
39
|
logLevel?: LogLevel;
|
|
12
40
|
requestFilter?: express.RequestHandler;
|
|
13
|
-
stateHandlers?:
|
|
41
|
+
stateHandlers?: StateHandlers;
|
|
14
42
|
beforeEach?: Hook;
|
|
15
43
|
afterEach?: Hook;
|
|
16
44
|
validateSSL?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verifier.spec.js","sourceRoot":"","sources":["../../../../src/dsl/verifier/verifier.spec.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA,8CAAwB;AACxB,sEAA8C;AAC9C,gDAA0B;AAC1B,yEAAwD;AACxD,+DAAyC;AAIzC,6CAAiC;AAEjC,uCAAsC;AAEtC,cAAI,CAAC,GAAG,CAAC,0BAAc,CAAC,CAAC;AAEjB,IAAA,8BAAM,CAAU;AAExB,QAAQ,CAAC,UAAU,EAAE;IACnB,SAAS,CAAC;QACR,eAAK,CAAC,OAAO,EAAE,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,IAAM,KAAK,GAAG,cAAc,CAAC;IAC7B,IAAI,CAAW,CAAC;IAChB,IAAI,IAAqB,CAAC;IAC1B,IAAI,QAAiB,CAAC;IACtB,IAAM,eAAe,GAAG,mBAAmB,CAAC;IAE5C,UAAU,CAAC;;QACT,QAAQ,GAAG,KAAK,CAAC;QACjB,IAAI,GAAG;YACL,eAAe,iBAAA;YACf,aAAa,EAAE,UAAC,GAAG,EAAE,GAAG,EAAE,IAAI;gBAC5B,IAAI,EAAE,CAAC;YACT,CAAC;YACD,aAAa;gBACX,GAAC,KAAK,IAAG;oBACP,QAAQ,GAAG,IAAI,CAAC;oBAChB,OAAO,OAAO,CAAC,OAAO,
|
|
1
|
+
{"version":3,"file":"verifier.spec.js","sourceRoot":"","sources":["../../../../src/dsl/verifier/verifier.spec.ts"],"names":[],"mappings":"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"}
|
package/src/v3/pact.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as MatchersV3 from './matchers';
|
|
2
|
+
import { JsonMap } from '../common/jsonTypes';
|
|
2
3
|
/**
|
|
3
4
|
* Options for the mock server
|
|
4
5
|
*/
|
|
@@ -26,7 +27,7 @@ export interface PactV3Options {
|
|
|
26
27
|
}
|
|
27
28
|
export interface V3ProviderState {
|
|
28
29
|
description: string;
|
|
29
|
-
parameters?:
|
|
30
|
+
parameters?: JsonMap;
|
|
30
31
|
}
|
|
31
32
|
declare type TemplateHeaders = {
|
|
32
33
|
[header: string]: string | MatchersV3.Matcher<string>;
|
|
@@ -54,7 +55,7 @@ export declare class PactV3 {
|
|
|
54
55
|
private states;
|
|
55
56
|
private pact;
|
|
56
57
|
constructor(opts: PactV3Options);
|
|
57
|
-
given(providerState: string, parameters?:
|
|
58
|
+
given(providerState: string, parameters?: JsonMap): PactV3;
|
|
58
59
|
uponReceiving(desc: string): PactV3;
|
|
59
60
|
withRequest(req: V3Request): PactV3;
|
|
60
61
|
withRequestBinaryFile(req: V3Request, contentType: string, file: string): PactV3;
|
|
@@ -63,5 +64,6 @@ export declare class PactV3 {
|
|
|
63
64
|
withResponseBinaryFile(res: V3Response, contentType: string, file: string): PactV3;
|
|
64
65
|
withResponseMultipartFileUpload(req: V3Response, contentType: string, file: string, part: string): PactV3;
|
|
65
66
|
executeTest<T>(testFn: (mockServer: V3MockServer) => Promise<T>): Promise<T>;
|
|
67
|
+
private setup;
|
|
66
68
|
}
|
|
67
69
|
export {};
|
package/src/v3/pact.js
CHANGED
|
@@ -68,7 +68,7 @@ var PactV3 = /** @class */ (function () {
|
|
|
68
68
|
function PactV3(opts) {
|
|
69
69
|
this.states = [];
|
|
70
70
|
this.opts = opts;
|
|
71
|
-
this.
|
|
71
|
+
this.setup();
|
|
72
72
|
}
|
|
73
73
|
PactV3.prototype.given = function (providerState, parameters) {
|
|
74
74
|
this.states.push({ description: providerState, parameters: parameters });
|
|
@@ -143,11 +143,18 @@ var PactV3 = /** @class */ (function () {
|
|
|
143
143
|
})
|
|
144
144
|
.finally(function () {
|
|
145
145
|
_this.pact.shutdownTest(result);
|
|
146
|
+
_this.setup();
|
|
146
147
|
});
|
|
147
148
|
}
|
|
148
149
|
this.pact.shutdownTest(result);
|
|
150
|
+
this.setup();
|
|
149
151
|
return Promise.reject(result.testError);
|
|
150
152
|
};
|
|
153
|
+
// reset the internal state
|
|
154
|
+
// (this.pact cannot be re-used between tests)
|
|
155
|
+
PactV3.prototype.setup = function () {
|
|
156
|
+
this.pact = new index_node_1.default.Pact(this.opts.consumer, this.opts.provider, package_json_1.version, ramda_1.omit(['consumer', 'provider', 'dir'], this.opts));
|
|
157
|
+
};
|
|
151
158
|
return PactV3;
|
|
152
159
|
}());
|
|
153
160
|
exports.PactV3 = PactV3;
|
package/src/v3/pact.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pact.js","sourceRoot":"","sources":["../../../src/v3/pact.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,+BAA0D;AAE1D,mDAAmE;AAEnE,uEAAgF;
|
|
1
|
+
{"version":3,"file":"pact.js","sourceRoot":"","sources":["../../../src/v3/pact.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,+BAA0D;AAE1D,mDAAmE;AAEnE,uEAAgF;AAiEhF,SAAS,YAAY,CAAC,KAA+B;IACnD,IAAM,KAAK,GAAG,eAAO,CAAC,KAAK,CAAC,CAAC;IAC7B,IAAM,MAAM,GAAG,eAAO,CACpB,WAAG,CAAC,UAAC,EAAa;YAAZ,WAAG,EAAE,cAAM;QAAM,OAAA,WAAG,CAAC,UAAC,GAAG,IAAK,OAAG,GAAG,SAAI,GAAK,EAAf,CAAe,EAAE,MAAM,CAAC;IAArC,CAAqC,EAAE,KAAK,CAAC,CACrE,CAAC;IACF,OAAO,YAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AAC3B,CAAC;AAED,SAAS,cAAc,CAAC,OAAwB,EAAE,MAAc;IAC9D,OAAO,YAAI,CACT,OAAK,MAAQ,EACb,WAAG,CAAC,UAAC,EAAM;YAAL,SAAC,EAAE,SAAC;QAAM,OAAG,CAAC,UAAK,CAAG;IAAZ,CAAY,EAAE,eAAO,CAAC,OAAO,CAAC,CAAC,CAChD,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,OAAwB,EAAE,MAAc;IAC9D,IAAM,MAAM,GAAa,CAAC,EAAE,CAAC,CAAC;IAE9B,MAAM,CAAC,IAAI,CACN,MAAM,gBAAW,OAAO,CAAC,MAAM,UAAK,MAAM,cAAS,OAAO,CAAC,IAAM,CACrE,CAAC;IAEF,IAAI,OAAO,CAAC,KAAK,EAAE;QACjB,MAAM,CAAC,IAAI,CAAI,MAAM,sBAAiB,YAAY,CAAC,OAAO,CAAC,KAAK,CAAG,CAAC,CAAC;KACtE;IAED,IAAI,OAAO,CAAC,OAAO,EAAE;QACnB,MAAM,CAAC,IAAI,CACN,MAAM,kBAAa,MAAM,UAAK,cAAc,CAC7C,OAAO,CAAC,OAAO,EACZ,MAAM,OAAI,CACZ,CACJ,CAAC;KACH;IAED,IAAI,OAAO,CAAC,IAAI,EAAE;QAChB,IAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,CAAC,IAAI,CACN,MAAM,cAAS,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,aAAQ,IAAI,CAAC,MAAM,aAAU,CAClE,CAAC;KACH;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3B,CAAC;AAED,SAAS,wBAAwB,CAAC,UAAsB;IACtD,IAAI,OAAO,CAAC,GAAG,CAAC,gDAAgD,EAAE;QAChE,OAAO,UAAU,CAAC,MAAM,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,IAAI,KAAK,iBAAiB,EAA5B,CAA4B,CAAC,CAAC;KAC/D;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,iBAAiB,CAAC,oBAA8B;IACvD,OAAO,oBAAoB,CAAC,GAAG,CAAC,UAAC,YAAY,IAAK,OAAA,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,EAAxB,CAAwB,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,uBAAuB,CAAC,UAAsB,EAAE,MAAc;IACrE,OAAO;QACL,mDAAmD;OAChD,UAAU,CAAC,GAAG,CAAC,UAAC,QAAQ,EAAE,CAAC;QAC5B,IAAI,QAAQ,CAAC,IAAI,KAAK,mBAAmB,EAAE;YACzC,OAAO,OAAK,MAAM,GAAG,CAAC,kDAA6C,cAAc,CAC/E,QAAQ,CAAC,OAAO,EACb,MAAM,SAAM,CACd,CAAC;SACL;QACD,IAAI,QAAQ,CAAC,IAAI,KAAK,iBAAiB,EAAE;YACvC,OAAO,OAAK,MAAM,GAAG,CAAC,+DAA0D,cAAc,CAC5F,QAAQ,CAAC,OAAO,EACb,MAAM,SAAM,CACd,CAAC;SACL;QACD,OAAO,KAAG,MAAM,GAAG,CAAC,UAAK,QAAQ,CAAC,IAAI,UACpC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,SAAO,QAAQ,CAAC,IAAI,OAAI,CAAC,CAAC,CAAC,EAAE,IAC5C,QAAU,CAAC;IAChB,CAAC,CAAC,EACF,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED;IAOE,gBAAY,IAAmB;QAJvB,WAAM,GAAsB,EAAE,CAAC;QAKrC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;IAEM,sBAAK,GAAZ,UAAa,aAAqB,EAAE,UAAoB;QACtD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU,YAAA,EAAE,CAAC,CAAC;QAC7D,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,8BAAa,GAApB,UAAqB,IAAY;QAC/B,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5C,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,4BAAW,GAAlB,UAAmB,GAAc;QAC/B,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,sCAAqB,GAA5B,UACE,GAAc,EACd,WAAmB,EACnB,IAAY;QAEZ,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;QACvD,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,+CAA8B,GAArC,UACE,GAAc,EACd,WAAmB,EACnB,IAAY,EACZ,IAAY;QAEZ,IAAI,CAAC,IAAI,CAAC,6BAA6B,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACtE,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,gCAAe,GAAtB,UAAuB,GAAe;QACpC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACjB,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,uCAAsB,GAA7B,UACE,GAAe,EACf,WAAmB,EACnB,IAAY;QAEZ,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;QACxD,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,gDAA+B,GAAtC,UACE,GAAe,EACf,WAAmB,EACnB,IAAY,EACZ,IAAY;QAEZ,IAAI,CAAC,IAAI,CAAC,8BAA8B,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACvE,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,4BAAW,GAAlB,UACE,MAAgD;QADlD,iBAwDC;QArDC,IAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACxD,IAAI,MAAM,CAAC,UAAU,EAAE;YACrB,OAAO,MAAM,CAAC,UAAU;iBACrB,IAAI,CAAC,UAAC,GAAM;gBACX,IAAM,UAAU,GAAG,KAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;gBACjE,IAAI,UAAU,CAAC,eAAe,EAAE;oBAC9B,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC;iBAC9D;gBACD,IAAI,UAAU,CAAC,oBAAoB,EAAE;oBACnC,IAAM,UAAU,GAAG,iBAAiB,CAClC,UAAU,CAAC,oBAAoB,CAChC,CAAC;oBACF,IAAI,wBAAwB,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;wBACnD,2DAA2D;wBAC3D,OAAO,OAAO,CAAC,MAAM,CACnB,IAAI,KAAK,CAAC,uBAAuB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CACrD,CAAC;qBACH;iBACF;gBAED,KAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,EAAE,KAAI,CAAC,IAAI,CAAC,CAAC;gBACzD,OAAO,GAAG,CAAC;YACb,CAAC,CAAC;iBACD,KAAK,CAAC,UAAC,GAAU;gBAChB,IAAM,UAAU,GAAG,KAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;gBACjE,IAAI,UAAU,CAAC,eAAe,IAAI,UAAU,CAAC,oBAAoB,EAAE;oBACjE,IAAI,KAAK,GAAG,wCAAwC,CAAC;oBACrD,KAAK,IAAI,2CAAyC,GAAG,CAAC,OAAS,CAAC;oBAChE,IAAI,GAAG,CAAC,KAAK,EAAE;wBACb,KAAK,IAAI,OAAK,GAAG,CAAC,KAAK,OAAI,CAAC;qBAC7B;oBAED,IAAI,UAAU,CAAC,eAAe,EAAE;wBAC9B,KAAK,IAAI,WAAS,UAAU,CAAC,eAAiB,CAAC;qBAChD;oBACD,IAAI,UAAU,CAAC,oBAAoB,EAAE;wBACnC,KAAK,IAAI,WAAS,uBAAuB,CACvC,iBAAiB,CAAC,UAAU,CAAC,oBAAoB,CAAC,EAClD,MAAM,CACL,CAAC;qBACL;oBACD,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;iBACzC;gBACD,OAAO,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7B,CAAC,CAAC;iBACD,OAAO,CAAC;gBACP,KAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;gBAC/B,KAAI,CAAC,KAAK,EAAE,CAAC;YACf,CAAC,CAAC,CAAC;SACN;QACD,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAC/B,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,OAAO,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC1C,CAAC;IAED,2BAA2B;IAC3B,8CAA8C;IACtC,sBAAK,GAAb;QACE,IAAI,CAAC,IAAI,GAAG,IAAI,oBAAU,CAAC,IAAI,CAC7B,IAAI,CAAC,IAAI,CAAC,QAAQ,EAClB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAClB,sBAAkB,EAClB,YAAI,CAAC,CAAC,UAAU,EAAE,UAAU,EAAE,KAAK,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CACjD,CAAC;IACJ,CAAC;IACH,aAAC;AAAD,CAAC,AA3ID,IA2IC;AA3IY,wBAAM"}
|
package/src/v3/verifier.d.ts
CHANGED
|
@@ -1,8 +1,5 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
* Define needed state for given pacts
|
|
4
|
-
*/
|
|
5
|
-
export declare type StateHandler = (setup: boolean, parameters: Record<string, unknown>) => void;
|
|
1
|
+
import { ProxyOptions, StateHandlers } from 'dsl/verifier/proxy/types';
|
|
2
|
+
import * as express from 'express';
|
|
6
3
|
export interface VerifierV3Options {
|
|
7
4
|
provider: string;
|
|
8
5
|
logLevel: string;
|
|
@@ -13,15 +10,11 @@ export interface VerifierV3Options {
|
|
|
13
10
|
pactBrokerUsername?: string;
|
|
14
11
|
pactBrokerPassword?: string;
|
|
15
12
|
pactBrokerToken?: string;
|
|
16
|
-
|
|
17
|
-
* The timeout in milliseconds for request filters and provider state handlers
|
|
18
|
-
* to execute within
|
|
19
|
-
*/
|
|
20
|
-
callbackTimeout?: number;
|
|
13
|
+
timeout?: number;
|
|
21
14
|
publishVerificationResult?: boolean;
|
|
22
15
|
providerVersion?: string;
|
|
23
16
|
requestFilter?: express.RequestHandler;
|
|
24
|
-
stateHandlers?:
|
|
17
|
+
stateHandlers?: StateHandlers;
|
|
25
18
|
consumerVersionTags?: string | string[];
|
|
26
19
|
providerVersionTags?: string | string[];
|
|
27
20
|
consumerVersionSelectors?: ConsumerVersionSelector[];
|
|
@@ -36,11 +29,17 @@ export interface ConsumerVersionSelector {
|
|
|
36
29
|
latest?: boolean;
|
|
37
30
|
all?: boolean;
|
|
38
31
|
}
|
|
32
|
+
export declare type VerifierOptions = VerifierV3Options & ProxyOptions;
|
|
39
33
|
export declare class VerifierV3 {
|
|
40
34
|
private config;
|
|
41
|
-
|
|
35
|
+
private address;
|
|
36
|
+
private stateSetupPath;
|
|
37
|
+
constructor(config: VerifierOptions);
|
|
42
38
|
/**
|
|
43
39
|
* Verify a HTTP Provider
|
|
44
40
|
*/
|
|
45
41
|
verifyProvider(): Promise<unknown>;
|
|
42
|
+
private validateConfiguration;
|
|
43
|
+
private runProviderVerification;
|
|
44
|
+
private isLocalVerification;
|
|
46
45
|
}
|
package/src/v3/verifier.js
CHANGED
|
@@ -10,58 +10,117 @@ var __assign = (this && this.__assign) || function () {
|
|
|
10
10
|
};
|
|
11
11
|
return __assign.apply(this, arguments);
|
|
12
12
|
};
|
|
13
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
14
|
+
if (mod && mod.__esModule) return mod;
|
|
15
|
+
var result = {};
|
|
16
|
+
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
|
|
17
|
+
result["default"] = mod;
|
|
18
|
+
return result;
|
|
19
|
+
};
|
|
13
20
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
14
21
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
15
22
|
};
|
|
16
23
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
24
|
var ramda_1 = require("ramda");
|
|
25
|
+
var url = __importStar(require("url"));
|
|
26
|
+
var net_1 = require("../common/net");
|
|
27
|
+
var proxy_1 = require("../dsl/verifier/proxy");
|
|
18
28
|
var configurationError_1 = __importDefault(require("../errors/configurationError"));
|
|
19
|
-
var logger_1 =
|
|
20
|
-
var
|
|
29
|
+
var logger_1 = __importStar(require("../common/logger"));
|
|
30
|
+
var PactNative = __importStar(require("../../native/index.node"));
|
|
21
31
|
var VerifierV3 = /** @class */ (function () {
|
|
22
32
|
function VerifierV3(config) {
|
|
33
|
+
this.address = 'http://localhost';
|
|
34
|
+
this.stateSetupPath = '/_pactSetup';
|
|
23
35
|
this.config = config;
|
|
36
|
+
this.validateConfiguration();
|
|
24
37
|
}
|
|
25
38
|
/**
|
|
26
39
|
* Verify a HTTP Provider
|
|
27
40
|
*/
|
|
28
41
|
VerifierV3.prototype.verifyProvider = function () {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
}
|
|
40
|
-
if (!_this.config.provider) {
|
|
41
|
-
reject(new configurationError_1.default('Provider name is required'));
|
|
42
|
-
}
|
|
43
|
-
if ((ramda_1.isEmpty(_this.config.pactUrls) || !_this.config.pactUrls) &&
|
|
44
|
-
!_this.config.pactBrokerUrl) {
|
|
45
|
-
reject(new configurationError_1.default('Either a list of pactUrls or a pactBrokerUrl must be provided'));
|
|
46
|
-
}
|
|
47
|
-
try {
|
|
48
|
-
index_node_1.default.verify_provider(_this.config, function (err, val) {
|
|
49
|
-
if (err || !val) {
|
|
50
|
-
logger_1.default.debug('In verify_provider callback: FAILED with', err, val);
|
|
51
|
-
reject(err);
|
|
52
|
-
}
|
|
53
|
-
else {
|
|
54
|
-
logger_1.default.debug('In verify_provider callback: SUCCEEDED with', val);
|
|
55
|
-
resolve(val);
|
|
56
|
-
}
|
|
42
|
+
// Start the verification CLI proxy server
|
|
43
|
+
var server = proxy_1.createProxy(this.config, this.stateSetupPath);
|
|
44
|
+
// Run the verification once the proxy server is available
|
|
45
|
+
// and properly shut down the proxy before returning
|
|
46
|
+
return proxy_1.waitForServerReady(server)
|
|
47
|
+
.then(this.runProviderVerification())
|
|
48
|
+
.then(function (result) {
|
|
49
|
+
return new Promise(function (resolve) {
|
|
50
|
+
server.close(function () {
|
|
51
|
+
resolve(result);
|
|
57
52
|
});
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
catch (e) {
|
|
61
|
-
|
|
62
|
-
|
|
53
|
+
});
|
|
54
|
+
})
|
|
55
|
+
.catch(function (e) {
|
|
56
|
+
return new Promise(function (_, reject) {
|
|
57
|
+
server.close(function () {
|
|
58
|
+
reject(e);
|
|
59
|
+
});
|
|
60
|
+
});
|
|
63
61
|
});
|
|
64
62
|
};
|
|
63
|
+
VerifierV3.prototype.validateConfiguration = function () {
|
|
64
|
+
var config = __assign({}, this.config);
|
|
65
|
+
if (this.config.logLevel && !ramda_1.isEmpty(this.config.logLevel)) {
|
|
66
|
+
logger_1.setLogLevel(this.config.logLevel);
|
|
67
|
+
}
|
|
68
|
+
if (this.config.validateSSL === undefined) {
|
|
69
|
+
this.config.validateSSL = true;
|
|
70
|
+
}
|
|
71
|
+
if (this.config.changeOrigin === undefined) {
|
|
72
|
+
this.config.changeOrigin = false;
|
|
73
|
+
if (!this.isLocalVerification()) {
|
|
74
|
+
this.config.changeOrigin = true;
|
|
75
|
+
logger_1.default.warn("non-local provider address " + this.config.providerBaseUrl + " detected, setting 'changeOrigin' to 'true'. This property can be overridden.");
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
if (ramda_1.isEmpty(this.config)) {
|
|
79
|
+
throw new configurationError_1.default('no configuration provided to verifier');
|
|
80
|
+
}
|
|
81
|
+
// This is just too messy to do on the rust side. neon-serde would have helped, but appears unmaintained
|
|
82
|
+
// and is currently incompatible
|
|
83
|
+
if (this.config.consumerVersionSelectors) {
|
|
84
|
+
config.consumerVersionSelectorsString = this.config.consumerVersionSelectors.map(function (s) { return JSON.stringify(s); });
|
|
85
|
+
}
|
|
86
|
+
if (!this.config.provider) {
|
|
87
|
+
throw new configurationError_1.default('provider name is required');
|
|
88
|
+
}
|
|
89
|
+
if ((ramda_1.isEmpty(this.config.pactUrls) || !this.config.pactUrls) &&
|
|
90
|
+
!this.config.pactBrokerUrl) {
|
|
91
|
+
throw new configurationError_1.default('a list of pactUrls or a pactBrokerUrl must be provided');
|
|
92
|
+
}
|
|
93
|
+
return config;
|
|
94
|
+
};
|
|
95
|
+
// Run the Verification CLI process
|
|
96
|
+
VerifierV3.prototype.runProviderVerification = function () {
|
|
97
|
+
var _this = this;
|
|
98
|
+
return function (server) {
|
|
99
|
+
return new Promise(function (resolve, reject) {
|
|
100
|
+
var opts = __assign(__assign({ providerStatesSetupUrl: _this.address + ":" + server.address().port + _this.stateSetupPath }, _this.config), { providerBaseUrl: _this.address + ":" + server.address().port });
|
|
101
|
+
try {
|
|
102
|
+
PactNative.verify_provider(opts, function (err, val) {
|
|
103
|
+
if (err || !val) {
|
|
104
|
+
logger_1.default.trace({ err: err, val: val }, 'verification failed');
|
|
105
|
+
reject(err);
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
logger_1.default.trace({ val: val }, 'verification succeeded');
|
|
109
|
+
resolve(val);
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
logger_1.default.trace('submitted test to verify_provider');
|
|
113
|
+
}
|
|
114
|
+
catch (e) {
|
|
115
|
+
reject(e);
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
};
|
|
119
|
+
};
|
|
120
|
+
VerifierV3.prototype.isLocalVerification = function () {
|
|
121
|
+
var u = new url.URL(this.config.providerBaseUrl);
|
|
122
|
+
return (net_1.localAddresses.includes(u.host) || net_1.localAddresses.includes(u.hostname));
|
|
123
|
+
};
|
|
65
124
|
return VerifierV3;
|
|
66
125
|
}());
|
|
67
126
|
exports.VerifierV3 = VerifierV3;
|
package/src/v3/verifier.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verifier.js","sourceRoot":"","sources":["../../../src/v3/verifier.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"verifier.js","sourceRoot":"","sources":["../../../src/v3/verifier.ts"],"names":[],"mappings":"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"}
|
package/src/v3/verifier.spec.js
CHANGED
|
@@ -20,29 +20,32 @@ var expect = chai.expect;
|
|
|
20
20
|
describe('V3 Verifier', function () {
|
|
21
21
|
describe('invalid configuration', function () {
|
|
22
22
|
it('returns an error when no provider name is given', function () {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
23
|
+
expect(function () {
|
|
24
|
+
return new verifier_1.VerifierV3({
|
|
25
|
+
logLevel: 'fatal',
|
|
26
|
+
provider: '',
|
|
27
|
+
providerBaseUrl: 'http://localhost',
|
|
28
|
+
});
|
|
29
|
+
}).to.throw('provider name is required');
|
|
29
30
|
});
|
|
30
31
|
it('returns an error when no pactBrokerUrl and an empty list of pactUrls is given', function () {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
32
|
+
expect(function () {
|
|
33
|
+
return new verifier_1.VerifierV3({
|
|
34
|
+
logLevel: 'fatal',
|
|
35
|
+
provider: 'unitTest',
|
|
36
|
+
providerBaseUrl: 'http://localhost',
|
|
37
|
+
pactUrls: [],
|
|
38
|
+
});
|
|
39
|
+
}).to.throw('a list of pactUrls or a pactBrokerUrl must be provided');
|
|
38
40
|
});
|
|
39
41
|
it('returns an error when no pactBrokerUrl an no pactUrls is given', function () {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
42
|
+
expect(function () {
|
|
43
|
+
return new verifier_1.VerifierV3({
|
|
44
|
+
logLevel: 'fatal',
|
|
45
|
+
provider: 'unitTest',
|
|
46
|
+
providerBaseUrl: 'http://localhost',
|
|
47
|
+
});
|
|
48
|
+
}).to.throw('a list of pactUrls or a pactBrokerUrl must be provided');
|
|
46
49
|
});
|
|
47
50
|
});
|
|
48
51
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verifier.spec.js","sourceRoot":"","sources":["../../../src/v3/verifier.spec.ts"],"names":[],"mappings":";;;;;;;;;AAAA,+CAAmC;AAEnC,yCAA6B;AAE7B,IAAM,UAAU,GAAG;IACjB,wBAAwB,EAAE,cAAM,OAAA,EAAE,EAAF,CAAE;IAClC,qBAAqB,EAAE,cAAM,OAAA,EAAE,EAAF,CAAE;CAChC,CAAC;AACF,OAAO,CAAC,YAAY,CAAC,yBAAyB,EAAE,UAAU,CAAC,CAAC;AAE5D,wCAAwC;AACxC,uCAAwC;AAEhC,IAAA,oBAAM,CAAU;AAExB,QAAQ,CAAC,aAAa,EAAE;IACtB,QAAQ,CAAC,uBAAuB,EAAE;QAChC,EAAE,CAAC,iDAAiD,EAAE;YACpD,
|
|
1
|
+
{"version":3,"file":"verifier.spec.js","sourceRoot":"","sources":["../../../src/v3/verifier.spec.ts"],"names":[],"mappings":";;;;;;;;;AAAA,+CAAmC;AAEnC,yCAA6B;AAE7B,IAAM,UAAU,GAAG;IACjB,wBAAwB,EAAE,cAAM,OAAA,EAAE,EAAF,CAAE;IAClC,qBAAqB,EAAE,cAAM,OAAA,EAAE,EAAF,CAAE;CAChC,CAAC;AACF,OAAO,CAAC,YAAY,CAAC,yBAAyB,EAAE,UAAU,CAAC,CAAC;AAE5D,wCAAwC;AACxC,uCAAwC;AAEhC,IAAA,oBAAM,CAAU;AAExB,QAAQ,CAAC,aAAa,EAAE;IACtB,QAAQ,CAAC,uBAAuB,EAAE;QAChC,EAAE,CAAC,iDAAiD,EAAE;YACpD,MAAM,CACJ;gBACE,OAAA,IAAI,qBAAU,CAAC;oBACb,QAAQ,EAAE,OAAO;oBACjB,QAAQ,EAAE,EAAE;oBACZ,eAAe,EAAE,kBAAkB;iBACpC,CAAC;YAJF,CAIE,CACL,CAAC,EAAE,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,+EAA+E,EAAE;YAClF,MAAM,CACJ;gBACE,OAAA,IAAI,qBAAU,CAAC;oBACb,QAAQ,EAAE,OAAO;oBACjB,QAAQ,EAAE,UAAU;oBACpB,eAAe,EAAE,kBAAkB;oBACnC,QAAQ,EAAE,EAAE;iBACb,CAAC;YALF,CAKE,CACL,CAAC,EAAE,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC;QACvE,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,gEAAgE,EAAE;YACnE,MAAM,CACJ;gBACE,OAAA,IAAI,qBAAU,CAAC;oBACb,QAAQ,EAAE,OAAO;oBACjB,QAAQ,EAAE,UAAU;oBACpB,eAAe,EAAE,kBAAkB;iBACpC,CAAC;YAJF,CAIE,CACL,CAAC,EAAE,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC;QACvE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|