callman-core 1.7.1 → 1.8.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/dist/scenario-runner/runScenario.d.ts.map +1 -1
- package/dist/scenario-runner/runScenario.js +8 -0
- package/dist/scenario-runner/runScenario.js.map +1 -1
- package/dist/scenario-runner/templateResolver.d.ts.map +1 -1
- package/dist/scenario-runner/templateResolver.js +18 -0
- package/dist/scenario-runner/templateResolver.js.map +1 -1
- package/dist/scenario-runner/types.d.ts +1 -1
- package/dist/scenario-runner/types.d.ts.map +1 -1
- package/dist/script/executor.d.ts.map +1 -1
- package/dist/script/executor.js +75 -9
- package/dist/script/executor.js.map +1 -1
- package/dist/script/features/collectionVariables.d.ts +16 -0
- package/dist/script/features/collectionVariables.d.ts.map +1 -0
- package/dist/script/features/collectionVariables.js +83 -0
- package/dist/script/features/collectionVariables.js.map +1 -0
- package/dist/script/features/cryptojs.d.ts +8 -12
- package/dist/script/features/cryptojs.d.ts.map +1 -1
- package/dist/script/features/cryptojs.js +15 -99
- package/dist/script/features/cryptojs.js.map +1 -1
- package/dist/script/features/environment.d.ts +8 -1
- package/dist/script/features/environment.d.ts.map +1 -1
- package/dist/script/features/environment.js +25 -1
- package/dist/script/features/environment.js.map +1 -1
- package/dist/script/features/execution.d.ts +17 -0
- package/dist/script/features/execution.d.ts.map +1 -0
- package/dist/script/features/execution.js +60 -0
- package/dist/script/features/execution.js.map +1 -0
- package/dist/script/features/headerList.d.ts +44 -0
- package/dist/script/features/headerList.d.ts.map +1 -0
- package/dist/script/features/headerList.js +284 -0
- package/dist/script/features/headerList.js.map +1 -0
- package/dist/script/features/info.d.ts +10 -0
- package/dist/script/features/info.d.ts.map +1 -0
- package/dist/script/features/info.js +32 -0
- package/dist/script/features/info.js.map +1 -0
- package/dist/script/features/request.d.ts +3 -2
- package/dist/script/features/request.d.ts.map +1 -1
- package/dist/script/features/request.js +38 -29
- package/dist/script/features/request.js.map +1 -1
- package/dist/script/features/response.d.ts +7 -5
- package/dist/script/features/response.d.ts.map +1 -1
- package/dist/script/features/response.js +16 -8
- package/dist/script/features/response.js.map +1 -1
- package/dist/script/features/responseAssertions.d.ts +50 -0
- package/dist/script/features/responseAssertions.d.ts.map +1 -0
- package/dist/script/features/responseAssertions.js +293 -0
- package/dist/script/features/responseAssertions.js.map +1 -0
- package/dist/script/features/timers.d.ts +17 -0
- package/dist/script/features/timers.d.ts.map +1 -0
- package/dist/script/features/timers.js +152 -0
- package/dist/script/features/timers.js.map +1 -0
- package/dist/script/features/variables.d.ts +8 -1
- package/dist/script/features/variables.d.ts.map +1 -1
- package/dist/script/features/variables.js +57 -11
- package/dist/script/features/variables.js.map +1 -1
- package/dist/script/scope.d.ts +10 -0
- package/dist/script/scope.d.ts.map +1 -1
- package/dist/script/scope.js +13 -4
- package/dist/script/scope.js.map +1 -1
- package/dist/script/types.d.ts +51 -1
- package/dist/script/types.d.ts.map +1 -1
- package/dist/templating/generator-metadata.d.ts +1 -0
- package/dist/templating/generator-metadata.d.ts.map +1 -1
- package/dist/templating/generator-metadata.js +76 -0
- package/dist/templating/generator-metadata.js.map +1 -1
- package/dist/templating/postman-generators.d.ts +12 -0
- package/dist/templating/postman-generators.d.ts.map +1 -0
- package/dist/templating/postman-generators.js +577 -0
- package/dist/templating/postman-generators.js.map +1 -0
- package/dist/templating/template-engine.d.ts.map +1 -1
- package/dist/templating/template-engine.js +16 -0
- package/dist/templating/template-engine.js.map +1 -1
- package/dist/variables/resolver.d.ts.map +1 -1
- package/dist/variables/resolver.js +15 -0
- package/dist/variables/resolver.js.map +1 -1
- package/dist-cjs/scenario-runner/runScenario.js +8 -0
- package/dist-cjs/scenario-runner/runScenario.js.map +1 -1
- package/dist-cjs/scenario-runner/templateResolver.js +18 -0
- package/dist-cjs/scenario-runner/templateResolver.js.map +1 -1
- package/dist-cjs/script/executor.js +78 -9
- package/dist-cjs/script/executor.js.map +1 -1
- package/dist-cjs/script/features/collectionVariables.js +87 -0
- package/dist-cjs/script/features/collectionVariables.js.map +1 -0
- package/dist-cjs/script/features/cryptojs.js +18 -99
- package/dist-cjs/script/features/cryptojs.js.map +1 -1
- package/dist-cjs/script/features/environment.js +25 -1
- package/dist-cjs/script/features/environment.js.map +1 -1
- package/dist-cjs/script/features/execution.js +64 -0
- package/dist-cjs/script/features/execution.js.map +1 -0
- package/dist-cjs/script/features/headerList.js +289 -0
- package/dist-cjs/script/features/headerList.js.map +1 -0
- package/dist-cjs/script/features/info.js +36 -0
- package/dist-cjs/script/features/info.js.map +1 -0
- package/dist-cjs/script/features/request.js +38 -29
- package/dist-cjs/script/features/request.js.map +1 -1
- package/dist-cjs/script/features/response.js +16 -8
- package/dist-cjs/script/features/response.js.map +1 -1
- package/dist-cjs/script/features/responseAssertions.js +297 -0
- package/dist-cjs/script/features/responseAssertions.js.map +1 -0
- package/dist-cjs/script/features/timers.js +156 -0
- package/dist-cjs/script/features/timers.js.map +1 -0
- package/dist-cjs/script/features/variables.js +57 -11
- package/dist-cjs/script/features/variables.js.map +1 -1
- package/dist-cjs/script/scope.js +13 -4
- package/dist-cjs/script/scope.js.map +1 -1
- package/dist-cjs/templating/generator-metadata.js +77 -1
- package/dist-cjs/templating/generator-metadata.js.map +1 -1
- package/dist-cjs/templating/postman-generators.js +581 -0
- package/dist-cjs/templating/postman-generators.js.map +1 -0
- package/dist-cjs/templating/template-engine.js +16 -0
- package/dist-cjs/templating/template-engine.js.map +1 -1
- package/dist-cjs/variables/resolver.js +15 -0
- package/dist-cjs/variables/resolver.js.map +1 -1
- package/package.json +6 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request.js","sourceRoot":"","sources":["../../../src/script/features/request.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,EAAE;AACF,0EAA0E;AAC1E,4EAA4E;AAC5E,sEAAsE;AACtE,2DAA2D;
|
|
1
|
+
{"version":3,"file":"request.js","sourceRoot":"","sources":["../../../src/script/features/request.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,EAAE;AACF,0EAA0E;AAC1E,4EAA4E;AAC5E,sEAAsE;AACtE,2DAA2D;AAC3D,EAAE;AACF,gEAAgE;AAChE,+DAA+D;AAC/D,uEAAuE;AACvE,mEAAmE;AACnE,wCAAwC;AAExC,OAAO,EACL,gBAAgB,EAChB,iBAAiB,GAElB,MAAM,iBAAiB,CAAC;AAwBzB,MAAM,SAAS,GAAG,CAAC,IAA4B,EAA0B,EAAE,CAAC,CAAC;IAC3E,IAAI,EAAE,IAAI,CAAC,IAAI;IACf,GAAG,EAAE,IAAI,CAAC,GAAG;IACb,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;CAC7D,CAAC,CAAC;AAEH,MAAM,oBAAoB,GAAG,CAAC,KAAc,EAAU,EAAE;IACtD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAC1C,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,OAA6B,EAAE,EAAE,CACvD,OAAO;KACJ,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC;KAC1C,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACf,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE;IACrB,KAAK,EAAE,KAAK,CAAC,KAAK;CACnB,CAAC,CAAC;KACF,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAO7C,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,OAA2B,EAAoB,EAAE;IAC/E,MAAM,OAAO,GAAG,gBAAgB,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;IAClE,MAAM,KAAK,GAAG,gBAAgB,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9D,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAErC,MAAM,GAAG,GAAe;QACtB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,OAAO;QACP,KAAK;QACL,IAAI;QACJ,SAAS,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACjE,SAAS,EAAE,CAAC,GAAW,EAAE,KAAc,EAAE,EAAE;YACzC,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YAC/C,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,OAAO;YACT,CAAC;YACD,sEAAsE;YACtE,oEAAoE;YACpE,OAAO,CAAC,MAAM,CAAC;gBACb,GAAG,EAAE,aAAa;gBAClB,KAAK,EAAE,oBAAoB,CAAC,KAAK,CAAC;aACnC,CAAC,CAAC;QACL,CAAC;QACD,WAAW,EAAE,CAAC,GAAW,EAAE,EAAE;YAC3B,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YAC/C,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,OAAO;YACT,CAAC;YACD,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QAChC,CAAC;QACD,aAAa,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACnE,aAAa,EAAE,CAAC,GAAW,EAAE,KAAc,EAAE,EAAE;YAC7C,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YAC/C,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,OAAO;YACT,CAAC;YACD,KAAK,CAAC,MAAM,CAAC;gBACX,GAAG,EAAE,aAAa;gBAClB,KAAK,EAAE,oBAAoB,CAAC,KAAK,CAAC;aACnC,CAAC,CAAC;QACL,CAAC;QACD,eAAe,EAAE,CAAC,GAAW,EAAE,EAAE;YAC/B,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YAC/C,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,OAAO;YACT,CAAC;YACD,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QAC9B,CAAC;QACD,SAAS,CAAC,UAAmB;YAC3B,MAAM,eAAe,GAAG,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC;iBAC7C,IAAI,EAAE;iBACN,WAAW,EAAE,CAAC;YACjB,IAAI,eAAe,EAAE,CAAC;gBACpB,IAAI,CAAC,MAAM,GAAG,eAAe,CAAC;YAChC,CAAC;QACH,CAAC;QACD,MAAM,CAAC,OAAgB;YACrB,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;QACnC,CAAC;QACD,UAAU,CAAC,KAAc;YACvB,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;YACvB,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC3E,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QAC7B,CAAC;KACF,CAAC;IAEF,OAAO;QACL,GAAG;QACH,cAAc,EAAE,GAAG,EAAE,CAAC,CAAC;YACrB,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,GAAG,EAAE,GAAG,CAAC,GAAG;YACZ,OAAO,EAAE,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBACtD,GAAG,KAAK;gBACR,OAAO,EAAE,IAAI;aACd,CAAC,CAAC;YACH,KAAK,EAAE,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBAClD,GAAG,KAAK;gBACR,OAAO,EAAE,IAAI;aACd,CAAC,CAAC;YACH,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;SAC1B,CAAC;KACH,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { type HeaderList } from "./headerList.js";
|
|
2
|
+
import { ResponseAssertion } from "./responseAssertions.js";
|
|
2
3
|
import type { ScriptResponseState } from "../types.js";
|
|
3
4
|
export interface ResponseApi {
|
|
4
5
|
ok: boolean;
|
|
5
6
|
status: number;
|
|
6
7
|
code: number;
|
|
7
8
|
statusText: string;
|
|
8
|
-
headers:
|
|
9
|
+
headers: HeaderList;
|
|
9
10
|
data: unknown;
|
|
10
11
|
body: unknown;
|
|
11
12
|
rawBody: string;
|
|
@@ -14,12 +15,13 @@ export interface ResponseApi {
|
|
|
14
15
|
durationMs: number;
|
|
15
16
|
responseTime: number;
|
|
16
17
|
sizeBytes: number;
|
|
18
|
+
responseSize: number;
|
|
17
19
|
cookies: string[];
|
|
18
20
|
json: () => unknown;
|
|
19
21
|
text: () => string;
|
|
20
|
-
to?:
|
|
21
|
-
be?:
|
|
22
|
-
have?:
|
|
22
|
+
to?: ResponseAssertion;
|
|
23
|
+
be?: ResponseAssertion;
|
|
24
|
+
have?: ResponseAssertion;
|
|
23
25
|
}
|
|
24
26
|
export declare const buildResponseApi: (response: ScriptResponseState | null) => ResponseApi | null;
|
|
25
27
|
//# sourceMappingURL=response.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../../../src/script/features/response.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../../../src/script/features/response.ts"],"names":[],"mappings":"AAaA,OAAO,EAAoB,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEvD,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,UAAU,CAAC;IAIpB,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,EAAE,MAAM,OAAO,CAAC;IACpB,IAAI,EAAE,MAAM,MAAM,CAAC;IACnB,EAAE,CAAC,EAAE,iBAAiB,CAAC;IACvB,EAAE,CAAC,EAAE,iBAAiB,CAAC;IACvB,IAAI,CAAC,EAAE,iBAAiB,CAAC;CAC1B;AAED,eAAO,MAAM,gBAAgB,GAAI,UAAU,mBAAmB,GAAG,IAAI,KAAG,WAAW,GAAG,IAuCrF,CAAC"}
|
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
// pm.response — read-only view of the captured response, plus the classic
|
|
2
2
|
// Postman fluent assertion entry points (.to / .be / .have).
|
|
3
3
|
//
|
|
4
|
-
//
|
|
5
|
-
//
|
|
6
|
-
//
|
|
7
|
-
//
|
|
8
|
-
|
|
4
|
+
// `headers` is exposed as a read-only HeaderList wrapper (see
|
|
5
|
+
// `./headerList.ts`). Bracket access (`pm.response.headers["x-trace"]`) keeps
|
|
6
|
+
// working bit-for-bit with the previous Record<string, string> shape; new
|
|
7
|
+
// scripts can call `pm.response.headers.get("X-Trace")` (case-insensitive),
|
|
8
|
+
// `.has(name)`, `.idx(i)`, `.all()`, or iterate with `for...of`.
|
|
9
|
+
//
|
|
10
|
+
// `.to` / `.be` / `.have` are spliced with a `ResponseAssertion` instance so
|
|
11
|
+
// chains like `pm.response.to.be.success.and.have.jsonBody("data.id")` work
|
|
12
|
+
// without any helper wrappers.
|
|
13
|
+
import { createHeaderList } from "./headerList.js";
|
|
14
|
+
import { ResponseAssertion } from "./responseAssertions.js";
|
|
9
15
|
export const buildResponseApi = (response) => {
|
|
10
16
|
if (!response) {
|
|
11
17
|
return null;
|
|
@@ -19,7 +25,7 @@ export const buildResponseApi = (response) => {
|
|
|
19
25
|
status: response.status,
|
|
20
26
|
code: response.status,
|
|
21
27
|
statusText: response.statusText,
|
|
22
|
-
headers: response.headers,
|
|
28
|
+
headers: createHeaderList(response.headers, { readOnly: true }),
|
|
23
29
|
data: parsedBody,
|
|
24
30
|
body: parsedBody,
|
|
25
31
|
rawBody: response.rawBody,
|
|
@@ -28,13 +34,15 @@ export const buildResponseApi = (response) => {
|
|
|
28
34
|
durationMs: response.durationMs,
|
|
29
35
|
responseTime: response.durationMs,
|
|
30
36
|
sizeBytes: response.sizeBytes,
|
|
37
|
+
responseSize: response.sizeBytes,
|
|
31
38
|
cookies: [...response.cookies],
|
|
32
39
|
json: () => response.jsonBody,
|
|
33
40
|
text: () => response.rawBody,
|
|
34
41
|
};
|
|
35
42
|
// Splice fluent assertion getters onto the same object so chains like
|
|
36
|
-
// `pm.response.to.have.status(200)`
|
|
37
|
-
|
|
43
|
+
// `pm.response.to.have.status(200)`, `pm.response.to.be.success`, and
|
|
44
|
+
// `pm.response.to.have.jsonBody("data.id", "abc")` all work.
|
|
45
|
+
const assertion = new ResponseAssertion(api);
|
|
38
46
|
api.to = assertion;
|
|
39
47
|
api.be = assertion;
|
|
40
48
|
api.have = assertion;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"response.js","sourceRoot":"","sources":["../../../src/script/features/response.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,6DAA6D;AAC7D,EAAE;AACF,
|
|
1
|
+
{"version":3,"file":"response.js","sourceRoot":"","sources":["../../../src/script/features/response.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,6DAA6D;AAC7D,EAAE;AACF,8DAA8D;AAC9D,8EAA8E;AAC9E,0EAA0E;AAC1E,4EAA4E;AAC5E,iEAAiE;AACjE,EAAE;AACF,6EAA6E;AAC7E,4EAA4E;AAC5E,+BAA+B;AAE/B,OAAO,EAAE,gBAAgB,EAAmB,MAAM,iBAAiB,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AA6B5D,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,QAAoC,EAAsB,EAAE;IAC3F,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAED,iEAAiE;IACjE,4EAA4E;IAC5E,oEAAoE;IACpE,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,CAAC;IAEtD,MAAM,GAAG,GAAgB;QACvB,EAAE,EAAE,QAAQ,CAAC,EAAE;QACf,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,IAAI,EAAE,QAAQ,CAAC,MAAM;QACrB,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,OAAO,EAAE,gBAAgB,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC/D,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,GAAG,EAAE,QAAQ,CAAC,OAAO;QACrB,WAAW,EAAE,QAAQ,CAAC,WAAW;QACjC,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,YAAY,EAAE,QAAQ,CAAC,UAAU;QACjC,SAAS,EAAE,QAAQ,CAAC,SAAS;QAC7B,YAAY,EAAE,QAAQ,CAAC,SAAS;QAChC,OAAO,EAAE,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC;QAC9B,IAAI,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ;QAC7B,IAAI,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO;KAC7B,CAAC;IAEF,sEAAsE;IACtE,sEAAsE;IACtE,6DAA6D;IAC7D,MAAM,SAAS,GAAG,IAAI,iBAAiB,CAAC,GAAG,CAAC,CAAC;IAC7C,GAAG,CAAC,EAAE,GAAG,SAAS,CAAC;IACnB,GAAG,CAAC,EAAE,GAAG,SAAS,CAAC;IACnB,GAAG,CAAC,IAAI,GAAG,SAAS,CAAC;IAErB,OAAO,GAAG,CAAC;AACb,CAAC,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { PmAssertion, type AssertionFlags } from "./assertions.js";
|
|
2
|
+
export declare class ResponseAssertion extends PmAssertion {
|
|
3
|
+
constructor(actual: unknown, flags?: AssertionFlags);
|
|
4
|
+
get not(): ResponseAssertion;
|
|
5
|
+
get deep(): ResponseAssertion;
|
|
6
|
+
get nested(): ResponseAssertion;
|
|
7
|
+
private decide;
|
|
8
|
+
private readStatus;
|
|
9
|
+
private readContentType;
|
|
10
|
+
private readRawBody;
|
|
11
|
+
private readJsonBody;
|
|
12
|
+
private statusInRange;
|
|
13
|
+
private statusExactly;
|
|
14
|
+
get ok(): ResponseAssertion;
|
|
15
|
+
get success(): ResponseAssertion;
|
|
16
|
+
get info(): ResponseAssertion;
|
|
17
|
+
get redirection(): ResponseAssertion;
|
|
18
|
+
get clientError(): ResponseAssertion;
|
|
19
|
+
get serverError(): ResponseAssertion;
|
|
20
|
+
get error(): ResponseAssertion;
|
|
21
|
+
get notFound(): ResponseAssertion;
|
|
22
|
+
get unauthorized(): ResponseAssertion;
|
|
23
|
+
get forbidden(): ResponseAssertion;
|
|
24
|
+
get badRequest(): ResponseAssertion;
|
|
25
|
+
get rateLimited(): ResponseAssertion;
|
|
26
|
+
get accepted(): ResponseAssertion;
|
|
27
|
+
get withBody(): ResponseAssertion;
|
|
28
|
+
get json(): ResponseAssertion;
|
|
29
|
+
get xml(): ResponseAssertion;
|
|
30
|
+
get html(): ResponseAssertion;
|
|
31
|
+
/**
|
|
32
|
+
* `.have.body()` — non-empty body.
|
|
33
|
+
* `.have.body("substring")` — body string contains substring.
|
|
34
|
+
*/
|
|
35
|
+
body(expected?: unknown): ResponseAssertion;
|
|
36
|
+
/**
|
|
37
|
+
* `.have.jsonBody()` — body parses as JSON (non-undefined).
|
|
38
|
+
* `.have.jsonBody("path.to.field")` — dot-path lookup must exist.
|
|
39
|
+
* `.have.jsonBody("path.to.field", expected)` — dot-path lookup must
|
|
40
|
+
* deep-equal `expected`.
|
|
41
|
+
*/
|
|
42
|
+
jsonBody(path?: unknown, expected?: unknown): ResponseAssertion;
|
|
43
|
+
/**
|
|
44
|
+
* `.have.jsonSchema(schema)` — placeholder. Real implementation arrives
|
|
45
|
+
* in the Phase 2.4 work that bundles ajv. Throws a clear error today so
|
|
46
|
+
* scripts fail fast rather than silently passing.
|
|
47
|
+
*/
|
|
48
|
+
jsonSchema(_schema: unknown): ResponseAssertion;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=responseAssertions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"responseAssertions.d.ts","sourceRoot":"","sources":["../../../src/script/features/responseAssertions.ts"],"names":[],"mappings":"AAkCA,OAAO,EAAE,WAAW,EAAE,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAgBnE,qBAAa,iBAAkB,SAAQ,WAAW;gBACpC,MAAM,EAAE,OAAO,EAAE,KAAK,GAAE,cAAmB;IAMvD,IAAa,GAAG,IAAI,iBAAiB,CAKpC;IACD,IAAa,IAAI,IAAI,iBAAiB,CAErC;IACD,IAAa,MAAM,IAAI,iBAAiB,CAKvC;IAGD,OAAO,CAAC,MAAM;IAgBd,OAAO,CAAC,UAAU;IAYlB,OAAO,CAAC,eAAe;IA6BvB,OAAO,CAAC,WAAW;IAgBnB,OAAO,CAAC,YAAY;IAiBpB,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,aAAa;IAUrB,IAAa,EAAE,IAAI,iBAAiB,CAEnC;IAED,IAAI,OAAO,IAAI,iBAAiB,CAE/B;IAED,IAAI,IAAI,IAAI,iBAAiB,CAE5B;IAED,IAAI,WAAW,IAAI,iBAAiB,CAEnC;IAED,IAAI,WAAW,IAAI,iBAAiB,CAEnC;IAED,IAAI,WAAW,IAAI,iBAAiB,CAEnC;IAED,IAAI,KAAK,IAAI,iBAAiB,CAQ7B;IAGD,IAAI,QAAQ,IAAI,iBAAiB,CAEhC;IAED,IAAI,YAAY,IAAI,iBAAiB,CAEpC;IAED,IAAI,SAAS,IAAI,iBAAiB,CAEjC;IAED,IAAI,UAAU,IAAI,iBAAiB,CAElC;IAED,IAAI,WAAW,IAAI,iBAAiB,CAEnC;IAED,IAAI,QAAQ,IAAI,iBAAiB,CAEhC;IAED,IAAI,QAAQ,IAAI,iBAAiB,CAQhC;IAGD,IAAI,IAAI,IAAI,iBAAiB,CAW5B;IAED,IAAI,GAAG,IAAI,iBAAiB,CAW3B;IAED,IAAI,IAAI,IAAI,iBAAiB,CAQ5B;IAGD;;;OAGG;IACH,IAAI,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,iBAAiB;IAiB3C;;;;;OAKG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,iBAAiB;IAmC/D;;;;OAIG;IACH,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,iBAAiB;CAKhD"}
|
|
@@ -0,0 +1,293 @@
|
|
|
1
|
+
// ResponseAssertion — Postman-compatible response-shape shortcuts.
|
|
2
|
+
//
|
|
3
|
+
// Extends PmAssertion with the family of getters and methods that scripts
|
|
4
|
+
// reach for on `pm.response.to.*`:
|
|
5
|
+
//
|
|
6
|
+
// pm.response.to.be.ok // 2xx
|
|
7
|
+
// pm.response.to.be.success // 2xx (alias)
|
|
8
|
+
// pm.response.to.be.info // 1xx
|
|
9
|
+
// pm.response.to.be.redirection // 3xx
|
|
10
|
+
// pm.response.to.be.clientError // 4xx
|
|
11
|
+
// pm.response.to.be.serverError // 5xx
|
|
12
|
+
// pm.response.to.be.notFound // 404
|
|
13
|
+
// pm.response.to.be.unauthorized // 401
|
|
14
|
+
// pm.response.to.be.forbidden // 403
|
|
15
|
+
// pm.response.to.be.badRequest // 400
|
|
16
|
+
// pm.response.to.be.rateLimited // 429
|
|
17
|
+
//
|
|
18
|
+
// pm.response.to.be.json // content-type includes application/json
|
|
19
|
+
// pm.response.to.be.xml // includes xml
|
|
20
|
+
// pm.response.to.be.html // includes html
|
|
21
|
+
//
|
|
22
|
+
// pm.response.to.have.body(text?) // substring or non-empty
|
|
23
|
+
// pm.response.to.have.jsonBody(path?, val?) // dot-path JSON lookup
|
|
24
|
+
//
|
|
25
|
+
// Each predicate honours `.not` for negation, and returns the assertion so
|
|
26
|
+
// chains keep going: `pm.response.to.be.success.and.have.body("ok")`.
|
|
27
|
+
//
|
|
28
|
+
// Back-compat note: PmAssertion already exposes a `.ok` getter that checks
|
|
29
|
+
// truthiness. We override it here to the 2xx range semantic Postman uses.
|
|
30
|
+
// Existing Callman scripts that called `pm.response.to.be.ok` previously
|
|
31
|
+
// always passed (a ResponseApi object is truthy by construction), so the
|
|
32
|
+
// new behaviour is strictly more useful — failing responses now fail the
|
|
33
|
+
// assertion as they should.
|
|
34
|
+
import { PmAssertion } from "./assertions.js";
|
|
35
|
+
import { safeGet } from "../../utils/get.js";
|
|
36
|
+
const isObject = (value) => typeof value === "object" && value !== null;
|
|
37
|
+
const formatValue = (value) => {
|
|
38
|
+
if (typeof value === "string")
|
|
39
|
+
return `"${value}"`;
|
|
40
|
+
if (value === undefined)
|
|
41
|
+
return "undefined";
|
|
42
|
+
try {
|
|
43
|
+
return JSON.stringify(value);
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
return String(value);
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
export class ResponseAssertion extends PmAssertion {
|
|
50
|
+
constructor(actual, flags = {}) {
|
|
51
|
+
super(actual, flags);
|
|
52
|
+
}
|
|
53
|
+
// ── Modifier getters preserve the subclass so the response-specific
|
|
54
|
+
// predicates stay available after .not / .deep / .nested ───────────────
|
|
55
|
+
get not() {
|
|
56
|
+
return new ResponseAssertion(this.actual, {
|
|
57
|
+
...this.flags,
|
|
58
|
+
negated: !this.flags.negated,
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
get deep() {
|
|
62
|
+
return new ResponseAssertion(this.actual, { ...this.flags, deep: true });
|
|
63
|
+
}
|
|
64
|
+
get nested() {
|
|
65
|
+
return new ResponseAssertion(this.actual, {
|
|
66
|
+
...this.flags,
|
|
67
|
+
nested: true,
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
// ── Internal assertion + status helpers ────────────────────────────────
|
|
71
|
+
decide(pass, positiveMessage, negativeMessage) {
|
|
72
|
+
const finalPass = this.flags.negated ? !pass : pass;
|
|
73
|
+
if (!finalPass) {
|
|
74
|
+
throw new Error(this.flags.negated
|
|
75
|
+
? negativeMessage ?? `Expected NOT: ${positiveMessage}`
|
|
76
|
+
: positiveMessage);
|
|
77
|
+
}
|
|
78
|
+
return this;
|
|
79
|
+
}
|
|
80
|
+
readStatus() {
|
|
81
|
+
if (isObject(this.actual)) {
|
|
82
|
+
const raw = this.actual.status;
|
|
83
|
+
if (typeof raw === "number" && Number.isFinite(raw)) {
|
|
84
|
+
return raw;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
throw new Error("Response shortcut requires a response object (missing numeric `status`)");
|
|
88
|
+
}
|
|
89
|
+
readContentType() {
|
|
90
|
+
if (!isObject(this.actual))
|
|
91
|
+
return "";
|
|
92
|
+
const direct = this.actual.contentType;
|
|
93
|
+
if (typeof direct === "string" && direct.length > 0) {
|
|
94
|
+
return direct.toLowerCase();
|
|
95
|
+
}
|
|
96
|
+
// Fall back to looking it up in the headers HeaderList / record.
|
|
97
|
+
const headers = this.actual.headers;
|
|
98
|
+
if (isObject(headers)) {
|
|
99
|
+
// HeaderList exposes a case-insensitive .get() — prefer it.
|
|
100
|
+
const headerGetter = headers.get;
|
|
101
|
+
if (typeof headerGetter === "function") {
|
|
102
|
+
const got = headerGetter.call(headers, "content-type");
|
|
103
|
+
if (typeof got === "string")
|
|
104
|
+
return got.toLowerCase();
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
const lookup = Object.entries(headers).find(([key]) => key.toLowerCase() === "content-type");
|
|
108
|
+
if (lookup && typeof lookup[1] === "string") {
|
|
109
|
+
return lookup[1].toLowerCase();
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return "";
|
|
114
|
+
}
|
|
115
|
+
readRawBody() {
|
|
116
|
+
if (!isObject(this.actual))
|
|
117
|
+
return "";
|
|
118
|
+
const raw = this.actual.rawBody;
|
|
119
|
+
if (typeof raw === "string")
|
|
120
|
+
return raw;
|
|
121
|
+
const body = this.actual.body;
|
|
122
|
+
if (typeof body === "string")
|
|
123
|
+
return body;
|
|
124
|
+
if (body !== null && body !== undefined) {
|
|
125
|
+
try {
|
|
126
|
+
return JSON.stringify(body);
|
|
127
|
+
}
|
|
128
|
+
catch {
|
|
129
|
+
return String(body);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return "";
|
|
133
|
+
}
|
|
134
|
+
readJsonBody() {
|
|
135
|
+
if (!isObject(this.actual))
|
|
136
|
+
return undefined;
|
|
137
|
+
const jsonFn = this.actual.json;
|
|
138
|
+
if (typeof jsonFn === "function") {
|
|
139
|
+
try {
|
|
140
|
+
return jsonFn.call(this.actual);
|
|
141
|
+
}
|
|
142
|
+
catch {
|
|
143
|
+
// fall through to other shapes
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
const direct = this.actual.jsonBody;
|
|
147
|
+
if (direct !== undefined)
|
|
148
|
+
return direct;
|
|
149
|
+
const body = this.actual.body;
|
|
150
|
+
if (body !== undefined)
|
|
151
|
+
return body;
|
|
152
|
+
return this.actual.data;
|
|
153
|
+
}
|
|
154
|
+
statusInRange(min, max, label) {
|
|
155
|
+
const status = this.readStatus();
|
|
156
|
+
return this.decide(status >= min && status <= max, `Expected status ${status} to be ${label} (${min}-${max})`, `Expected status ${status} NOT to be ${label} (${min}-${max})`);
|
|
157
|
+
}
|
|
158
|
+
statusExactly(expected, label) {
|
|
159
|
+
const status = this.readStatus();
|
|
160
|
+
return this.decide(status === expected, `Expected status ${status} to be ${expected} (${label})`, `Expected status ${status} NOT to be ${expected} (${label})`);
|
|
161
|
+
}
|
|
162
|
+
// ── Status-range predicates ───────────────────────────────────────────
|
|
163
|
+
get ok() {
|
|
164
|
+
return this.statusInRange(200, 299, "OK / 2xx");
|
|
165
|
+
}
|
|
166
|
+
get success() {
|
|
167
|
+
return this.statusInRange(200, 299, "success / 2xx");
|
|
168
|
+
}
|
|
169
|
+
get info() {
|
|
170
|
+
return this.statusInRange(100, 199, "informational / 1xx");
|
|
171
|
+
}
|
|
172
|
+
get redirection() {
|
|
173
|
+
return this.statusInRange(300, 399, "redirection / 3xx");
|
|
174
|
+
}
|
|
175
|
+
get clientError() {
|
|
176
|
+
return this.statusInRange(400, 499, "client error / 4xx");
|
|
177
|
+
}
|
|
178
|
+
get serverError() {
|
|
179
|
+
return this.statusInRange(500, 599, "server error / 5xx");
|
|
180
|
+
}
|
|
181
|
+
get error() {
|
|
182
|
+
// Postman's `.error` matches any 4xx OR 5xx response.
|
|
183
|
+
const status = this.readStatus();
|
|
184
|
+
return this.decide(status >= 400 && status <= 599, `Expected status ${status} to be an error (4xx-5xx)`, `Expected status ${status} NOT to be an error (4xx-5xx)`);
|
|
185
|
+
}
|
|
186
|
+
// ── Status-exact predicates ───────────────────────────────────────────
|
|
187
|
+
get notFound() {
|
|
188
|
+
return this.statusExactly(404, "Not Found");
|
|
189
|
+
}
|
|
190
|
+
get unauthorized() {
|
|
191
|
+
return this.statusExactly(401, "Unauthorized");
|
|
192
|
+
}
|
|
193
|
+
get forbidden() {
|
|
194
|
+
return this.statusExactly(403, "Forbidden");
|
|
195
|
+
}
|
|
196
|
+
get badRequest() {
|
|
197
|
+
return this.statusExactly(400, "Bad Request");
|
|
198
|
+
}
|
|
199
|
+
get rateLimited() {
|
|
200
|
+
return this.statusExactly(429, "Too Many Requests / rate limited");
|
|
201
|
+
}
|
|
202
|
+
get accepted() {
|
|
203
|
+
return this.statusExactly(202, "Accepted");
|
|
204
|
+
}
|
|
205
|
+
get withBody() {
|
|
206
|
+
// Postman shorthand — non-empty body.
|
|
207
|
+
const body = this.readRawBody();
|
|
208
|
+
return this.decide(body.length > 0, "Expected response to have a body", "Expected response NOT to have a body");
|
|
209
|
+
}
|
|
210
|
+
// ── Content-type predicates ───────────────────────────────────────────
|
|
211
|
+
get json() {
|
|
212
|
+
const ct = this.readContentType();
|
|
213
|
+
const isJson = ct.includes("application/json") ||
|
|
214
|
+
ct.includes("+json") ||
|
|
215
|
+
ct.includes("text/json");
|
|
216
|
+
return this.decide(isJson, `Expected response Content-Type to be JSON, got "${ct || "(none)"}"`, `Expected response Content-Type NOT to be JSON, got "${ct || "(none)"}"`);
|
|
217
|
+
}
|
|
218
|
+
get xml() {
|
|
219
|
+
const ct = this.readContentType();
|
|
220
|
+
const isXml = ct.includes("application/xml") ||
|
|
221
|
+
ct.includes("text/xml") ||
|
|
222
|
+
ct.includes("+xml");
|
|
223
|
+
return this.decide(isXml, `Expected response Content-Type to be XML, got "${ct || "(none)"}"`, `Expected response Content-Type NOT to be XML, got "${ct || "(none)"}"`);
|
|
224
|
+
}
|
|
225
|
+
get html() {
|
|
226
|
+
const ct = this.readContentType();
|
|
227
|
+
const isHtml = ct.includes("text/html");
|
|
228
|
+
return this.decide(isHtml, `Expected response Content-Type to be HTML, got "${ct || "(none)"}"`, `Expected response Content-Type NOT to be HTML, got "${ct || "(none)"}"`);
|
|
229
|
+
}
|
|
230
|
+
// ── Body / payload assertions ─────────────────────────────────────────
|
|
231
|
+
/**
|
|
232
|
+
* `.have.body()` — non-empty body.
|
|
233
|
+
* `.have.body("substring")` — body string contains substring.
|
|
234
|
+
*/
|
|
235
|
+
body(expected) {
|
|
236
|
+
const raw = this.readRawBody();
|
|
237
|
+
if (expected === undefined) {
|
|
238
|
+
return this.decide(raw.length > 0, "Expected response to have a body", "Expected response NOT to have a body");
|
|
239
|
+
}
|
|
240
|
+
const needle = String(expected);
|
|
241
|
+
return this.decide(raw.includes(needle), `Expected response body to include ${formatValue(needle)}`, `Expected response body NOT to include ${formatValue(needle)}`);
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* `.have.jsonBody()` — body parses as JSON (non-undefined).
|
|
245
|
+
* `.have.jsonBody("path.to.field")` — dot-path lookup must exist.
|
|
246
|
+
* `.have.jsonBody("path.to.field", expected)` — dot-path lookup must
|
|
247
|
+
* deep-equal `expected`.
|
|
248
|
+
*/
|
|
249
|
+
jsonBody(path, expected) {
|
|
250
|
+
const json = this.readJsonBody();
|
|
251
|
+
if (path === undefined) {
|
|
252
|
+
return this.decide(json !== undefined && json !== null, "Expected response body to be valid JSON", "Expected response body NOT to be valid JSON");
|
|
253
|
+
}
|
|
254
|
+
if (typeof path !== "string") {
|
|
255
|
+
throw new TypeError("jsonBody(path) — path must be a string");
|
|
256
|
+
}
|
|
257
|
+
const lookup = safeGet(json, path);
|
|
258
|
+
if (arguments.length < 2) {
|
|
259
|
+
return this.decide(lookup.exists, `Expected response body to have JSON path "${path}"`, `Expected response body NOT to have JSON path "${path}"`);
|
|
260
|
+
}
|
|
261
|
+
// Two-arg form: assert existence + deep equality.
|
|
262
|
+
if (!lookup.exists) {
|
|
263
|
+
return this.decide(false, `Expected response body to have JSON path "${path}"`, `Expected response body NOT to have JSON path "${path}"`);
|
|
264
|
+
}
|
|
265
|
+
return this.decide(deepEqual(lookup.value, expected), `Expected JSON path "${path}" to equal ${formatValue(expected)}, got ${formatValue(lookup.value)}`, `Expected JSON path "${path}" NOT to equal ${formatValue(expected)}`);
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* `.have.jsonSchema(schema)` — placeholder. Real implementation arrives
|
|
269
|
+
* in the Phase 2.4 work that bundles ajv. Throws a clear error today so
|
|
270
|
+
* scripts fail fast rather than silently passing.
|
|
271
|
+
*/
|
|
272
|
+
jsonSchema(_schema) {
|
|
273
|
+
throw new Error("pm.response.to.have.jsonSchema is not yet supported — Phase 2.4 will land ajv-backed schema validation. Use pm.expect with manual checks for now.");
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
|
|
277
|
+
const deepEqual = (left, right) => {
|
|
278
|
+
if (Object.is(left, right))
|
|
279
|
+
return true;
|
|
280
|
+
if (Array.isArray(left) && Array.isArray(right)) {
|
|
281
|
+
return (left.length === right.length &&
|
|
282
|
+
left.every((value, index) => deepEqual(value, right[index])));
|
|
283
|
+
}
|
|
284
|
+
if (isRecord(left) && isRecord(right)) {
|
|
285
|
+
const leftKeys = Object.keys(left);
|
|
286
|
+
const rightKeys = Object.keys(right);
|
|
287
|
+
return (leftKeys.length === rightKeys.length &&
|
|
288
|
+
leftKeys.every((key) => Object.prototype.hasOwnProperty.call(right, key) &&
|
|
289
|
+
deepEqual(left[key], right[key])));
|
|
290
|
+
}
|
|
291
|
+
return false;
|
|
292
|
+
};
|
|
293
|
+
//# sourceMappingURL=responseAssertions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"responseAssertions.js","sourceRoot":"","sources":["../../../src/script/features/responseAssertions.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,EAAE;AACF,0EAA0E;AAC1E,mCAAmC;AACnC,EAAE;AACF,8CAA8C;AAC9C,sDAAsD;AACtD,8CAA8C;AAC9C,8CAA8C;AAC9C,8CAA8C;AAC9C,8CAA8C;AAC9C,8CAA8C;AAC9C,8CAA8C;AAC9C,8CAA8C;AAC9C,8CAA8C;AAC9C,8CAA8C;AAC9C,EAAE;AACF,iFAAiF;AACjF,uDAAuD;AACvD,wDAAwD;AACxD,EAAE;AACF,yEAAyE;AACzE,uEAAuE;AACvE,EAAE;AACF,2EAA2E;AAC3E,sEAAsE;AACtE,EAAE;AACF,2EAA2E;AAC3E,0EAA0E;AAC1E,yEAAyE;AACzE,yEAAyE;AACzE,yEAAyE;AACzE,4BAA4B;AAE5B,OAAO,EAAE,WAAW,EAAuB,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE7C,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAoC,EAAE,CACpE,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC;AAE9C,MAAM,WAAW,GAAG,CAAC,KAAc,EAAU,EAAE;IAC7C,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,KAAK,GAAG,CAAC;IACnD,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,WAAW,CAAC;IAC5C,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,OAAO,iBAAkB,SAAQ,WAAW;IAChD,YAAY,MAAe,EAAE,QAAwB,EAAE;QACrD,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACvB,CAAC;IAED,qEAAqE;IACrE,yEAAyE;IACzE,IAAa,GAAG;QACd,OAAO,IAAI,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE;YACxC,GAAG,IAAI,CAAC,KAAK;YACb,OAAO,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO;SAC7B,CAAC,CAAC;IACL,CAAC;IACD,IAAa,IAAI;QACf,OAAO,IAAI,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3E,CAAC;IACD,IAAa,MAAM;QACjB,OAAO,IAAI,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE;YACxC,GAAG,IAAI,CAAC,KAAK;YACb,MAAM,EAAE,IAAI;SACb,CAAC,CAAC;IACL,CAAC;IAED,0EAA0E;IAClE,MAAM,CACZ,IAAa,EACb,eAAuB,EACvB,eAAwB;QAExB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QACpD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,IAAI,CAAC,KAAK,CAAC,OAAO;gBAChB,CAAC,CAAC,eAAe,IAAI,iBAAiB,eAAe,EAAE;gBACvD,CAAC,CAAC,eAAe,CACpB,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,UAAU;QAChB,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1B,MAAM,GAAG,GAAI,IAAI,CAAC,MAA+B,CAAC,MAAM,CAAC;YACzD,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACpD,OAAO,GAAG,CAAC;YACb,CAAC;QACH,CAAC;QACD,MAAM,IAAI,KAAK,CACb,yEAAyE,CAC1E,CAAC;IACJ,CAAC;IAEO,eAAe;QACrB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;YAAE,OAAO,EAAE,CAAC;QACtC,MAAM,MAAM,GAAI,IAAI,CAAC,MAAoC,CAAC,WAAW,CAAC;QACtE,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpD,OAAO,MAAM,CAAC,WAAW,EAAE,CAAC;QAC9B,CAAC;QACD,iEAAiE;QACjE,MAAM,OAAO,GAAI,IAAI,CAAC,MAAgC,CAAC,OAAO,CAAC;QAC/D,IAAI,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACtB,4DAA4D;YAC5D,MAAM,YAAY,GAAI,OAA6B,CAAC,GAAG,CAAC;YACxD,IAAI,OAAO,YAAY,KAAK,UAAU,EAAE,CAAC;gBACvC,MAAM,GAAG,GAAI,YAA0C,CAAC,IAAI,CAC1D,OAAO,EACP,cAAc,CACf,CAAC;gBACF,IAAI,OAAO,GAAG,KAAK,QAAQ;oBAAE,OAAO,GAAG,CAAC,WAAW,EAAE,CAAC;YACxD,CAAC;iBAAM,CAAC;gBACN,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,OAAkC,CAAC,CAAC,IAAI,CACpE,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,cAAc,CAChD,CAAC;gBACF,IAAI,MAAM,IAAI,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;oBAC5C,OAAQ,MAAM,CAAC,CAAC,CAAY,CAAC,WAAW,EAAE,CAAC;gBAC7C,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAEO,WAAW;QACjB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;YAAE,OAAO,EAAE,CAAC;QACtC,MAAM,GAAG,GAAI,IAAI,CAAC,MAAgD,CAAC,OAAO,CAAC;QAC3E,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,OAAO,GAAG,CAAC;QACxC,MAAM,IAAI,GAAI,IAAI,CAAC,MAA6B,CAAC,IAAI,CAAC;QACtD,IAAI,OAAO,IAAI,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QAC1C,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACxC,IAAI,CAAC;gBACH,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAC9B,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;YACtB,CAAC;QACH,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAEO,YAAY;QAClB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;YAAE,OAAO,SAAS,CAAC;QAC7C,MAAM,MAAM,GAAI,IAAI,CAAC,MAA6B,CAAC,IAAI,CAAC;QACxD,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,CAAC;YACjC,IAAI,CAAC;gBACH,OAAQ,MAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACrD,CAAC;YAAC,MAAM,CAAC;gBACP,+BAA+B;YACjC,CAAC;QACH,CAAC;QACD,MAAM,MAAM,GAAI,IAAI,CAAC,MAAiC,CAAC,QAAQ,CAAC;QAChE,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,MAAM,CAAC;QACxC,MAAM,IAAI,GAAI,IAAI,CAAC,MAA6C,CAAC,IAAI,CAAC;QACtE,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC;QACpC,OAAQ,IAAI,CAAC,MAA6B,CAAC,IAAI,CAAC;IAClD,CAAC;IAEO,aAAa,CAAC,GAAW,EAAE,GAAW,EAAE,KAAa;QAC3D,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC,MAAM,CAChB,MAAM,IAAI,GAAG,IAAI,MAAM,IAAI,GAAG,EAC9B,mBAAmB,MAAM,UAAU,KAAK,KAAK,GAAG,IAAI,GAAG,GAAG,EAC1D,mBAAmB,MAAM,cAAc,KAAK,KAAK,GAAG,IAAI,GAAG,GAAG,CAC/D,CAAC;IACJ,CAAC;IAEO,aAAa,CAAC,QAAgB,EAAE,KAAa;QACnD,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC,MAAM,CAChB,MAAM,KAAK,QAAQ,EACnB,mBAAmB,MAAM,UAAU,QAAQ,KAAK,KAAK,GAAG,EACxD,mBAAmB,MAAM,cAAc,QAAQ,KAAK,KAAK,GAAG,CAC7D,CAAC;IACJ,CAAC;IAED,yEAAyE;IACzE,IAAa,EAAE;QACb,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;IAClD,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,eAAe,CAAC,CAAC;IACvD,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,qBAAqB,CAAC,CAAC;IAC7D,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,mBAAmB,CAAC,CAAC;IAC3D,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,oBAAoB,CAAC,CAAC;IAC5D,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,oBAAoB,CAAC,CAAC;IAC5D,CAAC;IAED,IAAI,KAAK;QACP,sDAAsD;QACtD,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC,MAAM,CAChB,MAAM,IAAI,GAAG,IAAI,MAAM,IAAI,GAAG,EAC9B,mBAAmB,MAAM,2BAA2B,EACpD,mBAAmB,MAAM,+BAA+B,CACzD,CAAC;IACJ,CAAC;IAED,yEAAyE;IACzE,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IAC9C,CAAC;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IACjD,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IAC9C,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;IAChD,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,kCAAkC,CAAC,CAAC;IACrE,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IAC7C,CAAC;IAED,IAAI,QAAQ;QACV,sCAAsC;QACtC,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAChC,OAAO,IAAI,CAAC,MAAM,CAChB,IAAI,CAAC,MAAM,GAAG,CAAC,EACf,kCAAkC,EAClC,sCAAsC,CACvC,CAAC;IACJ,CAAC;IAED,yEAAyE;IACzE,IAAI,IAAI;QACN,MAAM,EAAE,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QAClC,MAAM,MAAM,GACV,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;YAC/B,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;YACpB,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QAC3B,OAAO,IAAI,CAAC,MAAM,CAChB,MAAM,EACN,mDAAmD,EAAE,IAAI,QAAQ,GAAG,EACpE,uDAAuD,EAAE,IAAI,QAAQ,GAAG,CACzE,CAAC;IACJ,CAAC;IAED,IAAI,GAAG;QACL,MAAM,EAAE,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QAClC,MAAM,KAAK,GACT,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;YAC9B,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;YACvB,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACtB,OAAO,IAAI,CAAC,MAAM,CAChB,KAAK,EACL,kDAAkD,EAAE,IAAI,QAAQ,GAAG,EACnE,sDAAsD,EAAE,IAAI,QAAQ,GAAG,CACxE,CAAC;IACJ,CAAC;IAED,IAAI,IAAI;QACN,MAAM,EAAE,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QACxC,OAAO,IAAI,CAAC,MAAM,CAChB,MAAM,EACN,mDAAmD,EAAE,IAAI,QAAQ,GAAG,EACpE,uDAAuD,EAAE,IAAI,QAAQ,GAAG,CACzE,CAAC;IACJ,CAAC;IAED,yEAAyE;IACzE;;;OAGG;IACH,IAAI,CAAC,QAAkB;QACrB,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAC/B,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC,MAAM,CAChB,GAAG,CAAC,MAAM,GAAG,CAAC,EACd,kCAAkC,EAClC,sCAAsC,CACvC,CAAC;QACJ,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;QAChC,OAAO,IAAI,CAAC,MAAM,CAChB,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EACpB,qCAAqC,WAAW,CAAC,MAAM,CAAC,EAAE,EAC1D,yCAAyC,WAAW,CAAC,MAAM,CAAC,EAAE,CAC/D,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACH,QAAQ,CAAC,IAAc,EAAE,QAAkB;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACjC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC,MAAM,CAChB,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI,EACnC,yCAAyC,EACzC,6CAA6C,CAC9C,CAAC;QACJ,CAAC;QACD,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,MAAM,IAAI,SAAS,CAAC,wCAAwC,CAAC,CAAC;QAChE,CAAC;QACD,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACnC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC,MAAM,CAChB,MAAM,CAAC,MAAM,EACb,6CAA6C,IAAI,GAAG,EACpD,iDAAiD,IAAI,GAAG,CACzD,CAAC;QACJ,CAAC;QACD,kDAAkD;QAClD,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACnB,OAAO,IAAI,CAAC,MAAM,CAChB,KAAK,EACL,6CAA6C,IAAI,GAAG,EACpD,iDAAiD,IAAI,GAAG,CACzD,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAChB,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,EACjC,uBAAuB,IAAI,cAAc,WAAW,CAAC,QAAQ,CAAC,SAAS,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAClG,uBAAuB,IAAI,kBAAkB,WAAW,CAAC,QAAQ,CAAC,EAAE,CACrE,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,UAAU,CAAC,OAAgB;QACzB,MAAM,IAAI,KAAK,CACb,mJAAmJ,CACpJ,CAAC;IACJ,CAAC;CACF;AAED,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAoC,EAAE,CACpE,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAEvE,MAAM,SAAS,GAAG,CAAC,IAAa,EAAE,KAAc,EAAW,EAAE;IAC3D,IAAI,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACxC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAChD,OAAO,CACL,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM;YAC5B,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAC7D,CAAC;IACJ,CAAC;IACD,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACtC,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrC,OAAO,CACL,QAAQ,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM;YACpC,QAAQ,CAAC,KAAK,CACZ,CAAC,GAAG,EAAE,EAAE,CACN,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC;gBAChD,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CACnC,CACF,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export interface TimerApi {
|
|
2
|
+
setTimeout: (handler: unknown, delay?: unknown, ...args: unknown[]) => number;
|
|
3
|
+
clearTimeout: (id: unknown) => void;
|
|
4
|
+
setInterval: (handler: unknown, delay?: unknown, ...args: unknown[]) => number;
|
|
5
|
+
clearInterval: (id: unknown) => void;
|
|
6
|
+
}
|
|
7
|
+
export interface TimerFeature {
|
|
8
|
+
api: TimerApi;
|
|
9
|
+
/** Cancel every still-pending timer. Idempotent. */
|
|
10
|
+
dispose(): void;
|
|
11
|
+
/** Number of timers ever created — informational, for tests. */
|
|
12
|
+
totalCreated(): number;
|
|
13
|
+
/** Number of currently-active timers (not yet fired or cleared). */
|
|
14
|
+
activeCount(): number;
|
|
15
|
+
}
|
|
16
|
+
export declare const buildTimerFeature: () => TimerFeature;
|
|
17
|
+
//# sourceMappingURL=timers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timers.d.ts","sourceRoot":"","sources":["../../../src/script/features/timers.ts"],"names":[],"mappings":"AA2BA,MAAM,WAAW,QAAQ;IACvB,UAAU,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,MAAM,CAAC;IAC9E,YAAY,EAAE,CAAC,EAAE,EAAE,OAAO,KAAK,IAAI,CAAC;IACpC,WAAW,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,MAAM,CAAC;IAC/E,aAAa,EAAE,CAAC,EAAE,EAAE,OAAO,KAAK,IAAI,CAAC;CACtC;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,QAAQ,CAAC;IACd,oDAAoD;IACpD,OAAO,IAAI,IAAI,CAAC;IAChB,gEAAgE;IAChE,YAAY,IAAI,MAAM,CAAC;IACvB,oEAAoE;IACpE,WAAW,IAAI,MAAM,CAAC;CACvB;AAeD,eAAO,MAAM,iBAAiB,QAAO,YAsHpC,CAAC"}
|