@pact-foundation/pact 17.0.0 → 17.0.1
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 +7 -0
- package/package.json +2 -2
- package/src/dsl/verifier/proxy/hooks.d.ts +23 -8
- package/src/dsl/verifier/proxy/hooks.js +32 -42
- package/src/dsl/verifier/proxy/hooks.js.map +1 -1
- package/src/dsl/verifier/proxy/hooks.spec.js +87 -86
- package/src/dsl/verifier/proxy/hooks.spec.js.map +1 -1
- package/src/dsl/verifier/proxy/index.d.ts +1 -0
- package/src/dsl/verifier/proxy/index.js +1 -0
- package/src/dsl/verifier/proxy/index.js.map +1 -1
- package/src/dsl/verifier/proxy/proxy.d.ts +2 -1
- package/src/dsl/verifier/proxy/proxy.js +9 -13
- package/src/dsl/verifier/proxy/proxy.js.map +1 -1
- package/src/dsl/verifier/verifier.js +10 -2
- package/src/dsl/verifier/verifier.js.map +1 -1
- package/src/dsl/verifier/verifier.spec.js +1 -0
- package/src/dsl/verifier/verifier.spec.js.map +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file. See [commit-and-tag-version](https://github.com/absolute-version/commit-and-tag-version) for commit guidelines.
|
|
4
4
|
|
|
5
|
+
## [17.0.1](https://github.com/pact-foundation/pact-js/compare/v17.0.0...v17.0.1) (2026-07-01)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Fixes and Improvements
|
|
9
|
+
|
|
10
|
+
* **verifier:** run beforeEach/afterEach once per interaction without desyncing on hook failure ([#1865](https://github.com/pact-foundation/pact-js/issues/1865)) ([fed47e2](https://github.com/pact-foundation/pact-js/commit/fed47e220af427d654f8b192333e6d6425118425)), closes [#1864](https://github.com/pact-foundation/pact-js/issues/1864)
|
|
11
|
+
|
|
5
12
|
## [17.0.0](https://github.com/pact-foundation/pact-js/compare/v16.5.0...v17.0.0) (2026-06-25)
|
|
6
13
|
|
|
7
14
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pact-foundation/pact",
|
|
3
|
-
"version": "17.0.
|
|
3
|
+
"version": "17.0.1",
|
|
4
4
|
"description": "Pact for all things Javascript",
|
|
5
5
|
"main": "./src/index.js",
|
|
6
6
|
"types": "./src/index.d.ts",
|
|
@@ -131,7 +131,7 @@
|
|
|
131
131
|
"@types/lodash": "4.17.24",
|
|
132
132
|
"@types/nock": "11.1.0",
|
|
133
133
|
"@types/node": "24.13.2",
|
|
134
|
-
"@types/ramda": "0.
|
|
134
|
+
"@types/ramda": "0.32.0",
|
|
135
135
|
"@types/stack-utils": "2.0.3",
|
|
136
136
|
"@vitest/coverage-v8": "3.2.4",
|
|
137
137
|
"commit-and-tag-version": "12.7.3",
|
|
@@ -1,14 +1,29 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* actions
|
|
2
|
+
* `beforeEach`/`afterEach` are driven off the provider-state setup/teardown
|
|
3
|
+
* requests the core makes to `/_pactSetup`. For each interaction the core sends
|
|
4
|
+
* one or more "setup" actions, runs the interaction, then sends one or more
|
|
5
|
+
* "teardown" actions.
|
|
6
|
+
*
|
|
7
|
+
* We track the interaction boundary with a single `insideInteraction` flag that
|
|
8
|
+
* flips on the setup<->teardown edges, rather than counting requests. This is:
|
|
9
|
+
* - idempotent under retries: the core retries a failed state-change request,
|
|
10
|
+
* and a duplicate "setup" while already inside an interaction is a no-op; and
|
|
11
|
+
* - self-healing: it cannot accumulate error and latch into a broken state.
|
|
12
|
+
*
|
|
13
|
+
* Hook failures are recorded on `HooksState.errors` and the state-change request
|
|
14
|
+
* is still answered with a success, so a throwing hook never turns into a non-2xx
|
|
15
|
+
* response (which the core would retry, desyncing interaction tracking). The
|
|
16
|
+
* verifier surfaces any recorded errors once verification completes, so a failing
|
|
17
|
+
* hook still fails the build.
|
|
6
18
|
*/
|
|
7
19
|
import type { RequestHandler } from 'express';
|
|
8
20
|
import type { Hook } from './types';
|
|
9
21
|
export type HooksState = {
|
|
10
|
-
|
|
22
|
+
insideInteraction: boolean;
|
|
23
|
+
errors: Error[];
|
|
11
24
|
};
|
|
12
|
-
export declare const
|
|
13
|
-
export declare const
|
|
14
|
-
|
|
25
|
+
export declare const createHooksState: () => HooksState;
|
|
26
|
+
export declare const registerHooks: (hooks: {
|
|
27
|
+
beforeEach?: Hook;
|
|
28
|
+
afterEach?: Hook;
|
|
29
|
+
}, hooksState: HooksState) => RequestHandler;
|
|
@@ -3,53 +3,43 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
6
|
+
exports.registerHooks = exports.createHooksState = void 0;
|
|
7
7
|
const logger_1 = __importDefault(require("../../../common/logger"));
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
const registerBeforeHook = (beforeEach, hooksState) => async ({ body }, _res, next) => {
|
|
18
|
-
if (body?.action === 'setup' && hooksState.setupCounter === 1) {
|
|
19
|
-
logger_1.default.debug("executing 'beforeEach' hook");
|
|
20
|
-
try {
|
|
21
|
-
await beforeEach();
|
|
22
|
-
next();
|
|
23
|
-
}
|
|
24
|
-
catch (e) {
|
|
25
|
-
const error = e instanceof Error ? e : new Error(String(e));
|
|
26
|
-
logger_1.default.error(`error executing 'beforeEach' hook: ${error.message}`);
|
|
27
|
-
logger_1.default.debug(`Stack trace was: ${error.stack}`);
|
|
28
|
-
next(new Error(`error executing 'beforeEach' hook: ${error.message}`));
|
|
29
|
-
}
|
|
8
|
+
const createHooksState = () => ({
|
|
9
|
+
insideInteraction: false,
|
|
10
|
+
errors: [],
|
|
11
|
+
});
|
|
12
|
+
exports.createHooksState = createHooksState;
|
|
13
|
+
const runHook = async (name, hook, hooksState) => {
|
|
14
|
+
logger_1.default.debug(`executing '${name}' hook`);
|
|
15
|
+
try {
|
|
16
|
+
await hook();
|
|
30
17
|
}
|
|
31
|
-
|
|
32
|
-
|
|
18
|
+
catch (e) {
|
|
19
|
+
const error = e instanceof Error ? e : new Error(String(e));
|
|
20
|
+
logger_1.default.error(`error executing '${name}' hook: ${error.message}`);
|
|
21
|
+
logger_1.default.debug(`Stack trace was: ${error.stack}`);
|
|
22
|
+
hooksState.errors.push(new Error(`error executing '${name}' hook: ${error.message}`));
|
|
33
23
|
}
|
|
34
24
|
};
|
|
35
|
-
|
|
36
|
-
const
|
|
37
|
-
if (
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
}
|
|
43
|
-
catch (e) {
|
|
44
|
-
const error = e instanceof Error ? e : new Error(String(e));
|
|
45
|
-
logger_1.default.error(`error executing 'afterEach' hook: ${error.message}`);
|
|
46
|
-
logger_1.default.debug(`Stack trace was: ${error.stack}`);
|
|
47
|
-
next(new Error(`error executing 'afterEach' hook: ${error.message}`));
|
|
48
|
-
}
|
|
25
|
+
const registerHooks = (hooks, hooksState) => async ({ body }, _res, next) => {
|
|
26
|
+
const action = body?.action;
|
|
27
|
+
if (action === 'setup' && !hooksState.insideInteraction) {
|
|
28
|
+
// rising edge: the first "setup" of a new interaction
|
|
29
|
+
hooksState.insideInteraction = true;
|
|
30
|
+
if (hooks.beforeEach)
|
|
31
|
+
await runHook('beforeEach', hooks.beforeEach, hooksState);
|
|
49
32
|
}
|
|
50
|
-
else {
|
|
51
|
-
|
|
33
|
+
else if (action === 'teardown' && hooksState.insideInteraction) {
|
|
34
|
+
// falling edge: the first "teardown" after the interaction ran
|
|
35
|
+
hooksState.insideInteraction = false;
|
|
36
|
+
if (hooks.afterEach)
|
|
37
|
+
await runHook('afterEach', hooks.afterEach, hooksState);
|
|
52
38
|
}
|
|
39
|
+
// Always continue with a successful response. A hook failure must never
|
|
40
|
+
// become a non-2xx state-change response, or the core will retry it and
|
|
41
|
+
// desync interaction tracking. Failures are surfaced by the verifier later.
|
|
42
|
+
next();
|
|
53
43
|
};
|
|
54
|
-
exports.
|
|
44
|
+
exports.registerHooks = registerHooks;
|
|
55
45
|
//# sourceMappingURL=hooks.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../../../src/dsl/verifier/proxy/hooks.ts"],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../../../src/dsl/verifier/proxy/hooks.ts"],"names":[],"mappings":";;;;;;AAoBA,oEAA4C;AAQrC,MAAM,gBAAgB,GAAG,GAAe,EAAE,CAAC,CAAC;IACjD,iBAAiB,EAAE,KAAK;IACxB,MAAM,EAAE,EAAE;CACX,CAAC,CAAC;AAHU,QAAA,gBAAgB,oBAG1B;AAEH,MAAM,OAAO,GAAG,KAAK,EACnB,IAAgC,EAChC,IAAU,EACV,UAAsB,EACP,EAAE;IACjB,gBAAM,CAAC,KAAK,CAAC,cAAc,IAAI,QAAQ,CAAC,CAAC;IACzC,IAAI,CAAC;QACH,MAAM,IAAI,EAAE,CAAC;IACf,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,KAAK,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,gBAAM,CAAC,KAAK,CAAC,oBAAoB,IAAI,WAAW,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACjE,gBAAM,CAAC,KAAK,CAAC,oBAAoB,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;QAChD,UAAU,CAAC,MAAM,CAAC,IAAI,CACpB,IAAI,KAAK,CAAC,oBAAoB,IAAI,WAAW,KAAK,CAAC,OAAO,EAAE,CAAC,CAC9D,CAAC;IACJ,CAAC;AACH,CAAC,CAAC;AAEK,MAAM,aAAa,GACxB,CACE,KAA8C,EAC9C,UAAsB,EACN,EAAE,CACpB,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;IAC7B,MAAM,MAAM,GAAG,IAAI,EAAE,MAAM,CAAC;IAE5B,IAAI,MAAM,KAAK,OAAO,IAAI,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC;QACxD,sDAAsD;QACtD,UAAU,CAAC,iBAAiB,GAAG,IAAI,CAAC;QACpC,IAAI,KAAK,CAAC,UAAU;YAClB,MAAM,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IAC9D,CAAC;SAAM,IAAI,MAAM,KAAK,UAAU,IAAI,UAAU,CAAC,iBAAiB,EAAE,CAAC;QACjE,+DAA+D;QAC/D,UAAU,CAAC,iBAAiB,GAAG,KAAK,CAAC;QACrC,IAAI,KAAK,CAAC,SAAS;YACjB,MAAM,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAC5D,CAAC;IAED,wEAAwE;IACxE,wEAAwE;IACxE,4EAA4E;IAC5E,IAAI,EAAE,CAAC;AACT,CAAC,CAAC;AAxBS,QAAA,aAAa,iBAwBtB"}
|
|
@@ -2,100 +2,101 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const vitest_1 = require("vitest");
|
|
4
4
|
const hooks_1 = require("./hooks");
|
|
5
|
-
//
|
|
6
|
-
//
|
|
7
|
-
//
|
|
8
|
-
const doRequest =
|
|
9
|
-
|
|
10
|
-
const
|
|
11
|
-
// biome-ignore lint/suspicious/noExplicitAny: partial mock object — only body is needed to exercise the hook logic
|
|
12
|
-
const request = {
|
|
13
|
-
body: {
|
|
14
|
-
action,
|
|
15
|
-
},
|
|
16
|
-
};
|
|
5
|
+
// Mimics the proxy: a single hooks middleware handles every `/_pactSetup`
|
|
6
|
+
// request. `doRequest` drives it with a given action and resolves once the
|
|
7
|
+
// middleware calls next().
|
|
8
|
+
const doRequest = (action, handler) => {
|
|
9
|
+
// biome-ignore lint/suspicious/noExplicitAny: partial mock — only body is needed
|
|
10
|
+
const request = { body: { action } };
|
|
17
11
|
return new Promise((resolve) => {
|
|
18
|
-
// biome-ignore lint/suspicious/noExplicitAny: null
|
|
19
|
-
|
|
20
|
-
// biome-ignore lint/suspicious/noExplicitAny: null passed as res mock; only body is exercised
|
|
21
|
-
hookRequestHandler(request, null, resolve);
|
|
22
|
-
});
|
|
12
|
+
// biome-ignore lint/suspicious/noExplicitAny: null res mock; only body is exercised
|
|
13
|
+
handler(request, null, () => resolve());
|
|
23
14
|
});
|
|
24
15
|
};
|
|
25
|
-
describe('Verifier', () => {
|
|
16
|
+
describe('Verifier hooks', () => {
|
|
26
17
|
afterEach(() => {
|
|
27
18
|
vitest_1.vi.restoreAllMocks();
|
|
28
19
|
});
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
});
|
|
20
|
+
it('runs beforeEach and afterEach once per interaction (multiple "given" states)', async () => {
|
|
21
|
+
const state = (0, hooks_1.createHooksState)();
|
|
22
|
+
const beforeEach = vitest_1.vi.fn().mockResolvedValue(undefined);
|
|
23
|
+
const afterEach = vitest_1.vi.fn().mockResolvedValue(undefined);
|
|
24
|
+
const handler = (0, hooks_1.registerHooks)({ beforeEach, afterEach }, state);
|
|
25
|
+
// Interaction with two "given" states: setup x2, teardown x2
|
|
26
|
+
await doRequest('setup', handler);
|
|
27
|
+
await doRequest('setup', handler);
|
|
28
|
+
await doRequest('teardown', handler);
|
|
29
|
+
await doRequest('teardown', handler);
|
|
30
|
+
expect(beforeEach).toHaveBeenCalledOnce();
|
|
31
|
+
expect(afterEach).toHaveBeenCalledOnce();
|
|
42
32
|
});
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
33
|
+
it('runs the hooks once for each of several interactions', async () => {
|
|
34
|
+
const state = (0, hooks_1.createHooksState)();
|
|
35
|
+
const beforeEach = vitest_1.vi.fn().mockResolvedValue(undefined);
|
|
36
|
+
const afterEach = vitest_1.vi.fn().mockResolvedValue(undefined);
|
|
37
|
+
const handler = (0, hooks_1.registerHooks)({ beforeEach, afterEach }, state);
|
|
38
|
+
// Interaction 1 (two states)
|
|
39
|
+
await doRequest('setup', handler);
|
|
40
|
+
await doRequest('setup', handler);
|
|
41
|
+
await doRequest('teardown', handler);
|
|
42
|
+
await doRequest('teardown', handler);
|
|
43
|
+
// Interaction 2 (one state)
|
|
44
|
+
await doRequest('setup', handler);
|
|
45
|
+
await doRequest('teardown', handler);
|
|
46
|
+
// Interaction 3 (three states)
|
|
47
|
+
await doRequest('setup', handler);
|
|
48
|
+
await doRequest('setup', handler);
|
|
49
|
+
await doRequest('setup', handler);
|
|
50
|
+
await doRequest('teardown', handler);
|
|
51
|
+
await doRequest('teardown', handler);
|
|
52
|
+
await doRequest('teardown', handler);
|
|
53
|
+
expect(beforeEach).toHaveBeenCalledTimes(3);
|
|
54
|
+
expect(afterEach).toHaveBeenCalledTimes(3);
|
|
56
55
|
});
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
56
|
+
// Regression for #1864: a failing beforeEach used to desync a global counter,
|
|
57
|
+
// silently disabling the hooks for every subsequent interaction.
|
|
58
|
+
it('keeps running hooks for later interactions after a hook throws, and records the error', async () => {
|
|
59
|
+
const state = (0, hooks_1.createHooksState)();
|
|
60
|
+
const beforeEach = vitest_1.vi
|
|
61
|
+
.fn()
|
|
62
|
+
.mockRejectedValueOnce(new Error('transient failure'))
|
|
63
|
+
.mockResolvedValue(undefined);
|
|
64
|
+
const afterEach = vitest_1.vi.fn().mockResolvedValue(undefined);
|
|
65
|
+
const handler = (0, hooks_1.registerHooks)({ beforeEach, afterEach }, state);
|
|
66
|
+
// Three single-state interactions; beforeEach throws on the first.
|
|
67
|
+
for (let i = 0; i < 3; i++) {
|
|
68
|
+
await doRequest('setup', handler);
|
|
69
|
+
await doRequest('teardown', handler);
|
|
70
|
+
}
|
|
71
|
+
expect(beforeEach).toHaveBeenCalledTimes(3);
|
|
72
|
+
expect(afterEach).toHaveBeenCalledTimes(3);
|
|
73
|
+
expect(state.errors).toHaveLength(1);
|
|
74
|
+
expect(state.errors[0].message).toContain('beforeEach');
|
|
75
|
+
});
|
|
76
|
+
// A throwing hook must never turn into a non-2xx response (the proxy must keep
|
|
77
|
+
// serving), or the core would retry the request and desync tracking.
|
|
78
|
+
it('still calls next() when a hook throws', async () => {
|
|
79
|
+
const state = (0, hooks_1.createHooksState)();
|
|
80
|
+
const beforeEach = vitest_1.vi.fn().mockRejectedValue(new Error('boom'));
|
|
81
|
+
const handler = (0, hooks_1.registerHooks)({ beforeEach }, state);
|
|
82
|
+
// doRequest resolves only when next() is called.
|
|
83
|
+
await expect(doRequest('setup', handler)).resolves.toBeUndefined();
|
|
84
|
+
});
|
|
85
|
+
// The core retries a failed state-change request: a duplicate "setup" before
|
|
86
|
+
// any "teardown" must not re-fire beforeEach nor desync the interaction state.
|
|
87
|
+
it('is idempotent under a retried setup request', async () => {
|
|
88
|
+
const state = (0, hooks_1.createHooksState)();
|
|
89
|
+
const beforeEach = vitest_1.vi.fn().mockResolvedValue(undefined);
|
|
90
|
+
const afterEach = vitest_1.vi.fn().mockResolvedValue(undefined);
|
|
91
|
+
const handler = (0, hooks_1.registerHooks)({ beforeEach, afterEach }, state);
|
|
92
|
+
await doRequest('setup', handler);
|
|
93
|
+
await doRequest('setup', handler); // retried/duplicate setup
|
|
94
|
+
await doRequest('teardown', handler);
|
|
95
|
+
// next interaction
|
|
96
|
+
await doRequest('setup', handler);
|
|
97
|
+
await doRequest('teardown', handler);
|
|
98
|
+
expect(beforeEach).toHaveBeenCalledTimes(2);
|
|
99
|
+
expect(afterEach).toHaveBeenCalledTimes(2);
|
|
99
100
|
});
|
|
100
101
|
});
|
|
101
102
|
//# sourceMappingURL=hooks.spec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.spec.js","sourceRoot":"","sources":["../../../../../src/dsl/verifier/proxy/hooks.spec.ts"],"names":[],"mappings":";;AACA,mCAA4B;AAE5B,
|
|
1
|
+
{"version":3,"file":"hooks.spec.js","sourceRoot":"","sources":["../../../../../src/dsl/verifier/proxy/hooks.spec.ts"],"names":[],"mappings":";;AACA,mCAA4B;AAE5B,mCAA0D;AAE1D,0EAA0E;AAC1E,2EAA2E;AAC3E,2BAA2B;AAC3B,MAAM,SAAS,GAAG,CAAC,MAAc,EAAE,OAAuB,EAAE,EAAE;IAC5D,iFAAiF;IACjF,MAAM,OAAO,GAAQ,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC;IAE1C,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QACnC,oFAAoF;QACpF,OAAO,CAAC,OAAO,EAAE,IAAW,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,SAAS,CAAC,GAAG,EAAE;QACb,WAAE,CAAC,eAAe,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8EAA8E,EAAE,KAAK,IAAI,EAAE;QAC5F,MAAM,KAAK,GAAG,IAAA,wBAAgB,GAAE,CAAC;QACjC,MAAM,UAAU,GAAG,WAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QACxD,MAAM,SAAS,GAAG,WAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QACvD,MAAM,OAAO,GAAG,IAAA,qBAAa,EAAC,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,KAAK,CAAC,CAAC;QAEhE,6DAA6D;QAC7D,MAAM,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAClC,MAAM,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAClC,MAAM,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACrC,MAAM,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAErC,MAAM,CAAC,UAAU,CAAC,CAAC,oBAAoB,EAAE,CAAC;QAC1C,MAAM,CAAC,SAAS,CAAC,CAAC,oBAAoB,EAAE,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;QACpE,MAAM,KAAK,GAAG,IAAA,wBAAgB,GAAE,CAAC;QACjC,MAAM,UAAU,GAAG,WAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QACxD,MAAM,SAAS,GAAG,WAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QACvD,MAAM,OAAO,GAAG,IAAA,qBAAa,EAAC,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,KAAK,CAAC,CAAC;QAEhE,6BAA6B;QAC7B,MAAM,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAClC,MAAM,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAClC,MAAM,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACrC,MAAM,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACrC,4BAA4B;QAC5B,MAAM,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAClC,MAAM,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACrC,+BAA+B;QAC/B,MAAM,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAClC,MAAM,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAClC,MAAM,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAClC,MAAM,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACrC,MAAM,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACrC,MAAM,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAErC,MAAM,CAAC,UAAU,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAC5C,MAAM,CAAC,SAAS,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,8EAA8E;IAC9E,iEAAiE;IACjE,EAAE,CAAC,uFAAuF,EAAE,KAAK,IAAI,EAAE;QACrG,MAAM,KAAK,GAAG,IAAA,wBAAgB,GAAE,CAAC;QACjC,MAAM,UAAU,GAAG,WAAE;aAClB,EAAE,EAAE;aACJ,qBAAqB,CAAC,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;aACrD,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAChC,MAAM,SAAS,GAAG,WAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QACvD,MAAM,OAAO,GAAG,IAAA,qBAAa,EAAC,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,KAAK,CAAC,CAAC;QAEhE,mEAAmE;QACnE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,MAAM,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAClC,MAAM,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACvC,CAAC;QAED,MAAM,CAAC,UAAU,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAC5C,MAAM,CAAC,SAAS,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACrC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,+EAA+E;IAC/E,qEAAqE;IACrE,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;QACrD,MAAM,KAAK,GAAG,IAAA,wBAAgB,GAAE,CAAC;QACjC,MAAM,UAAU,GAAG,WAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;QAChE,MAAM,OAAO,GAAG,IAAA,qBAAa,EAAC,EAAE,UAAU,EAAE,EAAE,KAAK,CAAC,CAAC;QAErD,iDAAiD;QACjD,MAAM,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;IACrE,CAAC,CAAC,CAAC;IAEH,6EAA6E;IAC7E,+EAA+E;IAC/E,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QAC3D,MAAM,KAAK,GAAG,IAAA,wBAAgB,GAAE,CAAC;QACjC,MAAM,UAAU,GAAG,WAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QACxD,MAAM,SAAS,GAAG,WAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QACvD,MAAM,OAAO,GAAG,IAAA,qBAAa,EAAC,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,KAAK,CAAC,CAAC;QAEhE,MAAM,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAClC,MAAM,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,0BAA0B;QAC7D,MAAM,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACrC,mBAAmB;QACnB,MAAM,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAClC,MAAM,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAErC,MAAM,CAAC,UAAU,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAC5C,MAAM,CAAC,SAAS,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -14,5 +14,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./hooks"), exports);
|
|
17
18
|
__exportStar(require("./proxy"), exports);
|
|
18
19
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/dsl/verifier/proxy/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAwB"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/dsl/verifier/proxy/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAwB;AACxB,0CAAwB"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import http from 'node:http';
|
|
2
|
+
import { type HooksState } from './hooks';
|
|
2
3
|
import type { ProxyOptions } from './types';
|
|
3
4
|
export declare const waitForServerReady: (server: http.Server) => Promise<http.Server>;
|
|
4
|
-
export declare const createProxy: (config: ProxyOptions, stateSetupPath: string, messageTransportPath: string) => http.Server;
|
|
5
|
+
export declare const createProxy: (config: ProxyOptions, stateSetupPath: string, messageTransportPath: string, hooksState: HooksState) => http.Server;
|
|
@@ -21,7 +21,7 @@ const waitForServerReady = (server) => new Promise((resolve, reject) => {
|
|
|
21
21
|
});
|
|
22
22
|
exports.waitForServerReady = waitForServerReady;
|
|
23
23
|
// Get the Proxy we'll pass to the CLI for verification
|
|
24
|
-
const createProxy = (config, stateSetupPath, messageTransportPath) => {
|
|
24
|
+
const createProxy = (config, stateSetupPath, messageTransportPath, hooksState) => {
|
|
25
25
|
const app = (0, express_1.default)();
|
|
26
26
|
const proxy = new http_proxy_1.default();
|
|
27
27
|
logger_1.default.trace(`Setting up state proxy with path: ${stateSetupPath}`);
|
|
@@ -36,18 +36,14 @@ const createProxy = (config, stateSetupPath, messageTransportPath) => {
|
|
|
36
36
|
}));
|
|
37
37
|
app.use(body_parser_1.default.urlencoded({ extended: true }));
|
|
38
38
|
app.use('/{*splat}', body_parser_1.default.raw({ type: '*/*' }));
|
|
39
|
-
// Hooks
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
app.use(stateSetupPath, (0, hooks_1.
|
|
47
|
-
}
|
|
48
|
-
if (config.afterEach) {
|
|
49
|
-
logger_1.default.trace("registered 'afterEach' hook");
|
|
50
|
-
app.use(stateSetupPath, (0, hooks_1.registerAfterHook)(config.afterEach, hooksState));
|
|
39
|
+
// Hooks. Tracking is only needed when a hook is registered; both hooks share
|
|
40
|
+
// the same interaction-boundary tracking, so they are registered together.
|
|
41
|
+
if (config.beforeEach || config.afterEach) {
|
|
42
|
+
if (config.beforeEach)
|
|
43
|
+
logger_1.default.trace("registered 'beforeEach' hook");
|
|
44
|
+
if (config.afterEach)
|
|
45
|
+
logger_1.default.trace("registered 'afterEach' hook");
|
|
46
|
+
app.use(stateSetupPath, (0, hooks_1.registerHooks)({ beforeEach: config.beforeEach, afterEach: config.afterEach }, hooksState));
|
|
51
47
|
}
|
|
52
48
|
// Trace req/res logging
|
|
53
49
|
if (config.logLevel === 'debug' || config.logLevel === 'trace') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proxy.js","sourceRoot":"","sources":["../../../../../src/dsl/verifier/proxy/proxy.ts"],"names":[],"mappings":";;;;;;AAAA,0DAA6B;AAC7B,8DAAqC;AACrC,sDAA8B;AAC9B,4DAAmC;AACnC,oEAA4C;AAC5C,
|
|
1
|
+
{"version":3,"file":"proxy.js","sourceRoot":"","sources":["../../../../../src/dsl/verifier/proxy/proxy.ts"],"names":[],"mappings":"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"}
|
|
@@ -96,8 +96,11 @@ class Verifier {
|
|
|
96
96
|
if ((0, lodash_1.isEmpty)(this.config)) {
|
|
97
97
|
return Promise.reject(new configurationError_1.default('No configuration provided to verifier'));
|
|
98
98
|
}
|
|
99
|
-
// Start the verification CLI proxy server
|
|
100
|
-
|
|
99
|
+
// Start the verification CLI proxy server. The hooks state is owned here so
|
|
100
|
+
// that any beforeEach/afterEach failures recorded during verification can be
|
|
101
|
+
// surfaced once it completes.
|
|
102
|
+
const hooksState = (0, proxy_1.createHooksState)();
|
|
103
|
+
const server = (0, proxy_1.createProxy)(this.config, this.stateSetupPath, this.messageTransportPath, hooksState);
|
|
101
104
|
logger_1.default.trace(`proxy created, waiting for startup`);
|
|
102
105
|
// Run the verification once the proxy server is available
|
|
103
106
|
return (0, proxy_1.waitForServerReady)(server)
|
|
@@ -109,6 +112,11 @@ class Verifier {
|
|
|
109
112
|
.then((result) => {
|
|
110
113
|
logger_1.default.trace('Verification completed, closing server');
|
|
111
114
|
server.close();
|
|
115
|
+
if (hooksState.errors.length > 0) {
|
|
116
|
+
throw new Error(`Provider verification hooks failed:\n${hooksState.errors
|
|
117
|
+
.map((e) => ` - ${e.message}`)
|
|
118
|
+
.join('\n')}`);
|
|
119
|
+
}
|
|
112
120
|
return result;
|
|
113
121
|
})
|
|
114
122
|
.catch((e) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verifier.js","sourceRoot":"","sources":["../../../../src/dsl/verifier/verifier.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIH,wDAA2B;AAC3B,2EAEoC;AACpC,mCAAuC;AACvC,8DAA0D;AAC1D,0CAAkD;AAClD,yFAAiE;AACjE,
|
|
1
|
+
{"version":3,"file":"verifier.js","sourceRoot":"","sources":["../../../../src/dsl/verifier/verifier.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIH,wDAA2B;AAC3B,2EAEoC;AACpC,mCAAuC;AACvC,8DAA0D;AAC1D,0CAAkD;AAClD,yFAAiE;AACjE,mCAA4E;AAG5E,MAAa,QAAQ;IACX,OAAO,GAAG,kBAAkB,CAAC;IAE7B,cAAc,GAAG,aAAa,CAAC;IAE/B,oBAAoB,GAAG,YAAY,CAAC;IAEpC,MAAM,CAAkB;IAExB,gBAAgB,GAAiC;QACvD,wBAAwB;KACzB,CAAC;IAEF,YAAY,MAAuB;QACjC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,IAAA,gBAAO,EAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC3D,mBAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC9C,IAAA,oBAAW,EAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACpC,CAAC;QAED,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YAClC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnB,gBAAM,CAAC,IAAI,CACT,GAAG,CAAC,wDAAwD,CAC7D,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YAC1C,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC;QACjC,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YAC1B,IAAI,CAAC,OAAO,GAAG,UAAU,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QACnD,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;YAC3C,IAAI,CAAC,MAAM,CAAC,YAAY,GAAG,KAAK,CAAC;YAEjC,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,CAAC;gBAChC,IAAI,CAAC,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC;gBAChC,gBAAM,CAAC,KAAK,CACV,8BAA8B,IAAI,CAAC,MAAM,CAAC,eAAe,+EAA+E,CACzI,CAAC;YACJ,CAAC;QACH,CAAC;QAED,IACE,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe;YAC5B,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB;YAC7B,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EACzB,CAAC;YACD,MAAM,IAAI,4BAAkB,CAC1B,+EAA+E,CAChF,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;;OAIG;IACI,cAAc;QACnB,gBAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAElC,IAAI,IAAA,gBAAO,EAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACzB,OAAO,OAAO,CAAC,MAAM,CACnB,IAAI,4BAAkB,CAAC,uCAAuC,CAAC,CAChE,CAAC;QACJ,CAAC;QAED,4EAA4E;QAC5E,6EAA6E;QAC7E,8BAA8B;QAC9B,MAAM,UAAU,GAAG,IAAA,wBAAgB,GAAE,CAAC;QACtC,MAAM,MAAM,GAAG,IAAA,mBAAW,EACxB,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,oBAAoB,EACzB,UAAU,CACX,CAAC;QACF,gBAAM,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;QAEnD,0DAA0D;QAC1D,OAAO,IAAA,0BAAkB,EAAC,MAAM,CAAC;aAC9B,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;YACf,gBAAM,CAAC,KAAK,CACV,qBAAsB,MAAM,CAAC,OAAO,EAAkB,CAAC,OAAO,EAAE,CACjE,CAAC;YACF,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC;aACD,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE,CAAC;aACpC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;YACf,gBAAM,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;YACvD,MAAM,CAAC,KAAK,EAAE,CAAC;YACf,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACjC,MAAM,IAAI,KAAK,CACb,wCAAwC,UAAU,CAAC,MAAM;qBACtD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;qBAC9B,IAAI,CAAC,IAAI,CAAC,EAAE,CAChB,CAAC;YACJ,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;YACX,gBAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC,OAAO,mBAAmB,CAAC,CAAC;YAClE,MAAM,CAAC,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,CAAC;QACV,CAAC,CAAC,CAAC;IACP,CAAC;IAED,mCAAmC;IAC3B,uBAAuB;QAC7B,OAAO,CAAC,MAAmB,EAAE,EAAE;YAC7B,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC,OAAO,EAAiB,CAAC;YACjD,MAAM,IAAI,GAA4B;gBACpC,sBAAsB,EAAE,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,GAAG,IAAI,CAAC,cAAc,EAAE;gBACvE,GAAG,IAAA,aAAI,EAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC;gBAChC,eAAe,EAAE,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,EAAE;gBAC1C,UAAU,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;oBAChD;wBACE,IAAI;wBACJ,IAAI,EAAE,IAAI,CAAC,oBAAoB;wBAC/B,QAAQ,EAAE,SAAS;qBACpB;iBACF,CAAC;aACH,CAAC;YACF,gBAAM,CAAC,KAAK,CAAC,yBAAyB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC9D,OAAO,mBAAc,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC1C,CAAC,CAAC;IACJ,CAAC;IAEO,mBAAmB;QACzB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;YACjC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,CAAC,GAAG,IAAI,kBAAG,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QACnD,OAAO,CACL,oBAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,oBAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CACvE,CAAC;IACJ,CAAC;CACF;AAhJD,4BAgJC"}
|
|
@@ -9,6 +9,7 @@ const logger_1 = __importDefault(require("../../common/logger"));
|
|
|
9
9
|
const verifier_1 = require("./verifier");
|
|
10
10
|
const mockState = vitest_1.vi.hoisted(() => ({ executed: false }));
|
|
11
11
|
vitest_1.vi.mock('./proxy', () => ({
|
|
12
|
+
createHooksState: () => ({ insideInteraction: false, errors: [] }),
|
|
12
13
|
createProxy: () => ({
|
|
13
14
|
close: () => {
|
|
14
15
|
mockState.executed = true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verifier.spec.js","sourceRoot":"","sources":["../../../../src/dsl/verifier/verifier.spec.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"verifier.spec.js","sourceRoot":"","sources":["../../../../src/dsl/verifier/verifier.spec.ts"],"names":[],"mappings":"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"}
|