@syn7xx/testops-mcp-server 0.1.4 → 0.1.5
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 +10 -0
- package/README.md +6 -2
- package/dist/domain/test-case/service.d.ts +13 -1
- package/dist/domain/test-case/service.d.ts.map +1 -1
- package/dist/domain/test-case/service.js +19 -5
- package/dist/domain/test-case/service.js.map +1 -1
- package/dist/domain/test-case/types.d.ts +17 -0
- package/dist/domain/test-case/types.d.ts.map +1 -1
- package/dist/presentation/test-case/tools.d.ts.map +1 -1
- package/dist/presentation/test-case/tools.js +70 -20
- package/dist/presentation/test-case/tools.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,16 @@ On each release, [release-it](https://github.com/release-it/release-it) with `@r
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.1.4] - 2026-04-03
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- `prepublishOnly` runs `npm run build` before every `npm publish` (CI and local)
|
|
15
|
+
|
|
16
|
+
### Changed
|
|
17
|
+
|
|
18
|
+
- Ship `CHANGELOG.md` in the npm package (`files`); expand README **Releasing** (conventional commits, manual workflow)
|
|
19
|
+
|
|
10
20
|
## [0.1.3] - 2026-04-03
|
|
11
21
|
|
|
12
22
|
### Added
|
package/README.md
CHANGED
|
@@ -204,16 +204,20 @@ Then use `"command": "testops-mcp-server"` and `"args": ["--url", "...", "--toke
|
|
|
204
204
|
|
|
205
205
|
### Test Case
|
|
206
206
|
|
|
207
|
+
Routing is defined in each tool’s **description** in `tools/list`. For step actions and expected results from `/api/testcase/{id}/step`, use **`testcase_get_scenario`** or **`testcase_get_step`** (same behavior).
|
|
208
|
+
|
|
207
209
|
| Tool | Description |
|
|
208
210
|
|------|-------------|
|
|
209
211
|
| `testcase_get` | Get test case by ID |
|
|
210
|
-
| `testcase_get_detail` |
|
|
211
|
-
| `testcase_get_scenario` |
|
|
212
|
+
| `testcase_get_detail` | Summary with flattened step strings and custom fields (not raw scenario JSON) |
|
|
213
|
+
| `testcase_get_scenario` | Scenario JSON: steps and expected results |
|
|
214
|
+
| `testcase_get_step` | Same as `testcase_get_scenario` (alias for LLM-friendly naming) |
|
|
212
215
|
| `testcase_update_step` | Update a step in scenario |
|
|
213
216
|
| `testcase_set_scenario` | Replace all steps in scenario |
|
|
214
217
|
| `testcase_get_custom_fields` | Get custom field values |
|
|
215
218
|
| `testcase_update_custom_fields` | Update custom field values |
|
|
216
219
|
| `testcase_search_by_aql` | Search test cases using AQL |
|
|
220
|
+
| `testcase_list_in_tree` | List test cases in a project tree (`treeId`, optional `parentNodeId`) |
|
|
217
221
|
|
|
218
222
|
## Project Structure
|
|
219
223
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Result } from '../../shared/result.js';
|
|
2
2
|
import { PageParams } from '../../shared/pagination.js';
|
|
3
|
-
import type { TestCase, TestCaseDetail, NormalizedScenario, CustomFieldWithValues, TestCaseSearchResult } from './types.js';
|
|
3
|
+
import type { TestCase, TestCaseDetail, NormalizedScenario, CustomFieldWithValues, TestCaseSearchResult, TestCaseFullTreeNode } from './types.js';
|
|
4
4
|
/**
|
|
5
5
|
* Get a test case by ID
|
|
6
6
|
* @param id - Test case ID
|
|
@@ -63,6 +63,18 @@ export declare const updateTestCaseCustomFields: (testCaseId: number, fields: Ar
|
|
|
63
63
|
* @param params - Pagination and options
|
|
64
64
|
* @returns Search results with pagination info
|
|
65
65
|
*/
|
|
66
|
+
export interface ListTestCasesInTreeParams extends PageParams {
|
|
67
|
+
parentNodeId?: number;
|
|
68
|
+
search?: string;
|
|
69
|
+
filterId?: number;
|
|
70
|
+
query?: string;
|
|
71
|
+
baseAql?: string;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* List test cases under a project tree (v2 tree-node).
|
|
75
|
+
* When `treeId` is set, TestOps scopes the result to that tree (see OpenAPI: test-case-tree-controller-v-2).
|
|
76
|
+
*/
|
|
77
|
+
export declare const listTestCasesInTree: (projectId: number, treeId: number, params?: ListTestCasesInTreeParams) => Promise<Result<TestCaseFullTreeNode, Error>>;
|
|
66
78
|
export declare const searchTestCasesByAQL: (projectId: number, rql: string, params?: PageParams & {
|
|
67
79
|
deleted?: boolean;
|
|
68
80
|
}) => Promise<Result<TestCaseSearchResult, Error>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../src/domain/test-case/service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAA2B,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,UAAU,EAAuB,MAAM,4BAA4B,CAAC;AAC7E,OAAO,KAAK,EACV,QAAQ,EACR,cAAc,EACd,kBAAkB,EAClB,qBAAqB,EACrB,oBAAoB,EACrB,MAAM,YAAY,CAAC;AASpB;;;;GAIG;AACH,eAAO,MAAM,WAAW,GACtB,IAAI,MAAM,KACT,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAEjC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,GAC5B,IAAI,MAAM,KACT,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,KAAK,CAAC,CAmCvC,CAAC;AAoBF;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,GAC9B,YAAY,MAAM,KACjB,OAAO,CAAC,MAAM,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAE3C,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,GAC7B,YAAY,MAAM,EAClB,QAAQ,MAAM,EACd,MAAM;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,KAC/C,OAAO,CAAC,MAAM,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAS3C,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,GAC9B,YAAY,MAAM,EAClB,OAAO,KAAK,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,KACxD,OAAO,CAAC,MAAM,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAY3C,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,GAClC,YAAY,MAAM,KACjB,OAAO,CAAC,MAAM,CAAC,qBAAqB,EAAE,EAAE,KAAK,CAAC,CAEhD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,GACrC,YAAY,MAAM,EAClB,QAAQ,KAAK,CAAC;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,KAC3D,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAM7B,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,GAC/B,WAAW,MAAM,EACjB,KAAK,MAAM,EACX,SAAS,UAAU,GAAG;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,KAC1C,OAAO,CAAC,MAAM,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAqB7C,CAAC"}
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../src/domain/test-case/service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAA2B,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,UAAU,EAAuB,MAAM,4BAA4B,CAAC;AAC7E,OAAO,KAAK,EACV,QAAQ,EACR,cAAc,EACd,kBAAkB,EAClB,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,EACrB,MAAM,YAAY,CAAC;AASpB;;;;GAIG;AACH,eAAO,MAAM,WAAW,GACtB,IAAI,MAAM,KACT,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAEjC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,GAC5B,IAAI,MAAM,KACT,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,KAAK,CAAC,CAmCvC,CAAC;AAoBF;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,GAC9B,YAAY,MAAM,KACjB,OAAO,CAAC,MAAM,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAE3C,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,GAC7B,YAAY,MAAM,EAClB,QAAQ,MAAM,EACd,MAAM;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,KAC/C,OAAO,CAAC,MAAM,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAS3C,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,GAC9B,YAAY,MAAM,EAClB,OAAO,KAAK,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,KACxD,OAAO,CAAC,MAAM,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAY3C,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,GAClC,YAAY,MAAM,KACjB,OAAO,CAAC,MAAM,CAAC,qBAAqB,EAAE,EAAE,KAAK,CAAC,CAEhD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,GACrC,YAAY,MAAM,EAClB,QAAQ,KAAK,CAAC;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,KAC3D,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAM7B,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,WAAW,yBAA0B,SAAQ,UAAU;IAC3D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,eAAO,MAAM,mBAAmB,GAC9B,WAAW,MAAM,EACjB,QAAQ,MAAM,EACd,SAAS,yBAAyB,KACjC,OAAO,CAAC,MAAM,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAoB7C,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC/B,WAAW,MAAM,EACjB,KAAK,MAAM,EACX,SAAS,UAAU,GAAG;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,KAC1C,OAAO,CAAC,MAAM,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAqB7C,CAAC"}
|
|
@@ -117,12 +117,26 @@ export const updateTestCaseCustomFields = async (testCaseId, fields) => {
|
|
|
117
117
|
return map(result, () => undefined);
|
|
118
118
|
};
|
|
119
119
|
/**
|
|
120
|
-
*
|
|
121
|
-
*
|
|
122
|
-
* @param rql - AQL query string
|
|
123
|
-
* @param params - Pagination and options
|
|
124
|
-
* @returns Search results with pagination info
|
|
120
|
+
* List test cases under a project tree (v2 tree-node).
|
|
121
|
+
* When `treeId` is set, TestOps scopes the result to that tree (see OpenAPI: test-case-tree-controller-v-2).
|
|
125
122
|
*/
|
|
123
|
+
export const listTestCasesInTree = async (projectId, treeId, params) => {
|
|
124
|
+
const { page, size, sort } = normalizePageParams({
|
|
125
|
+
...params,
|
|
126
|
+
sort: params?.sort ?? 'name,ASC',
|
|
127
|
+
});
|
|
128
|
+
return apiGet(`/api/v2/project/${projectId}/test-case/tree/tree-node`, {
|
|
129
|
+
treeId,
|
|
130
|
+
parentNodeId: params?.parentNodeId,
|
|
131
|
+
search: params?.search,
|
|
132
|
+
filterId: params?.filterId,
|
|
133
|
+
page,
|
|
134
|
+
size,
|
|
135
|
+
sort,
|
|
136
|
+
query: params?.query,
|
|
137
|
+
baseAql: params?.baseAql,
|
|
138
|
+
});
|
|
139
|
+
};
|
|
126
140
|
export const searchTestCasesByAQL = async (projectId, rql, params) => {
|
|
127
141
|
const { page, size, sort } = normalizePageParams(params);
|
|
128
142
|
const response = await apiGet('/api/testcase/__search', {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/domain/test-case/service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAU,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAc,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/domain/test-case/service.ts"],"names":[],"mappings":"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"}
|
|
@@ -48,4 +48,21 @@ export interface TestCaseSearchResult {
|
|
|
48
48
|
page: number;
|
|
49
49
|
size: number;
|
|
50
50
|
}
|
|
51
|
+
/** Page of tree nodes (groups and leaves) from v2 tree-node API */
|
|
52
|
+
export interface PageTestCaseTreeNode {
|
|
53
|
+
content?: TestCaseTreeNodeItem[];
|
|
54
|
+
totalElements?: number;
|
|
55
|
+
number?: number;
|
|
56
|
+
size?: number;
|
|
57
|
+
}
|
|
58
|
+
/** Group or leaf node; leaves expose `testCaseId` (see OpenAPI TestCaseTreeLeafDtoV2) */
|
|
59
|
+
export type TestCaseTreeNodeItem = Record<string, unknown>;
|
|
60
|
+
/** Response of GET .../test-case/tree/tree-node (TestCaseFullTreeNodeDto) */
|
|
61
|
+
export interface TestCaseFullTreeNode {
|
|
62
|
+
id?: number;
|
|
63
|
+
name?: string;
|
|
64
|
+
parentNodeId?: number;
|
|
65
|
+
customFieldValueId?: number;
|
|
66
|
+
children?: PageTestCaseTreeNode;
|
|
67
|
+
}
|
|
51
68
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/domain/test-case/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC5C,IAAI,EAAE;QACJ,QAAQ,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;CACH;AAED,MAAM,WAAW,qBAAqB;IACpC,WAAW,EAAE;QACX,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,MAAM,EAAE,KAAK,CAAC;QACZ,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;KACd,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/domain/test-case/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC5C,IAAI,EAAE;QACJ,QAAQ,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;CACH;AAED,MAAM,WAAW,qBAAqB;IACpC,WAAW,EAAE;QACX,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,MAAM,EAAE,KAAK,CAAC;QACZ,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;KACd,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,mEAAmE;AACnE,MAAM,WAAW,oBAAoB;IACnC,OAAO,CAAC,EAAE,oBAAoB,EAAE,CAAC;IACjC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,yFAAyF;AACzF,MAAM,MAAM,oBAAoB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE3D,6EAA6E;AAC7E,MAAM,WAAW,oBAAoB;IACnC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,EAAE,oBAAoB,CAAC;CACjC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../src/presentation/test-case/tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../src/presentation/test-case/tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAuC9D,eAAO,MAAM,qBAAqB,GAAI,QAAQ,SAAS,SAwTtD,CAAC"}
|
|
@@ -1,6 +1,28 @@
|
|
|
1
1
|
import * as z from 'zod';
|
|
2
2
|
import { isSuccess } from '../../shared/result.js';
|
|
3
|
-
import { getTestCase, getTestCaseDetail, getTestCaseScenario, updateScenarioStep, setTestCaseScenario, getTestCaseCustomFields, updateTestCaseCustomFields, searchTestCasesByAQL, } from '../../domain/test-case/index.js';
|
|
3
|
+
import { getTestCase, getTestCaseDetail, getTestCaseScenario, updateScenarioStep, setTestCaseScenario, getTestCaseCustomFields, updateTestCaseCustomFields, searchTestCasesByAQL, listTestCasesInTree, } from '../../domain/test-case/index.js';
|
|
4
|
+
const testCaseIdOnly = z.object({
|
|
5
|
+
id: z.number().describe('Allure test case ID (same as in TestOps UI / URL)'),
|
|
6
|
+
});
|
|
7
|
+
async function handleGetTestCaseScenario(args) {
|
|
8
|
+
const result = await getTestCaseScenario(args.id);
|
|
9
|
+
if (!isSuccess(result)) {
|
|
10
|
+
return {
|
|
11
|
+
content: [
|
|
12
|
+
{ type: 'text', text: `Error: ${result.error.message}` },
|
|
13
|
+
],
|
|
14
|
+
isError: true,
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
return {
|
|
18
|
+
content: [
|
|
19
|
+
{
|
|
20
|
+
type: 'text',
|
|
21
|
+
text: JSON.stringify(result.value, null, 2),
|
|
22
|
+
},
|
|
23
|
+
],
|
|
24
|
+
};
|
|
25
|
+
}
|
|
4
26
|
export const registerTestCaseTools = (server) => {
|
|
5
27
|
server.registerTool('testcase_get', {
|
|
6
28
|
title: 'Get Test Case',
|
|
@@ -24,7 +46,8 @@ export const registerTestCaseTools = (server) => {
|
|
|
24
46
|
});
|
|
25
47
|
server.registerTool('testcase_get_detail', {
|
|
26
48
|
title: 'Get Test Case Detail',
|
|
27
|
-
description: '
|
|
49
|
+
description: 'Aggregated card: name, description, tags, custom fields, and step texts as a simple list. For the raw scenario graph (step actions + expected results per step from /step), use testcase_get_scenario or testcase_get_step instead — not this tool.',
|
|
50
|
+
annotations: { readOnlyHint: true },
|
|
28
51
|
inputSchema: z.object({
|
|
29
52
|
id: z.number().describe('Test case ID'),
|
|
30
53
|
}),
|
|
@@ -44,24 +67,16 @@ export const registerTestCaseTools = (server) => {
|
|
|
44
67
|
});
|
|
45
68
|
server.registerTool('testcase_get_scenario', {
|
|
46
69
|
title: 'Get Test Case Scenario',
|
|
47
|
-
description: '
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
};
|
|
58
|
-
}
|
|
59
|
-
return {
|
|
60
|
-
content: [
|
|
61
|
-
{ type: 'text', text: JSON.stringify(result.value, null, 2) },
|
|
62
|
-
],
|
|
63
|
-
};
|
|
64
|
-
});
|
|
70
|
+
description: 'Normalized scenario from GET /api/testcase/{id}/step (scenarioSteps, step bodies, expected results). For steps + expected results use this or testcase_get_step only — call by this exact name from tools/list.',
|
|
71
|
+
annotations: { readOnlyHint: true },
|
|
72
|
+
inputSchema: testCaseIdOnly,
|
|
73
|
+
}, handleGetTestCaseScenario);
|
|
74
|
+
server.registerTool('testcase_get_step', {
|
|
75
|
+
title: 'Get Test Case Steps',
|
|
76
|
+
description: 'Same as testcase_get_scenario (alias). Use either name from tools/list for scenario JSON; do not invent variants (e.g. get_steps).',
|
|
77
|
+
annotations: { readOnlyHint: true },
|
|
78
|
+
inputSchema: testCaseIdOnly,
|
|
79
|
+
}, handleGetTestCaseScenario);
|
|
65
80
|
server.registerTool('testcase_update_step', {
|
|
66
81
|
title: 'Update Scenario Step',
|
|
67
82
|
description: 'Update a step in a test case scenario',
|
|
@@ -158,6 +173,41 @@ export const registerTestCaseTools = (server) => {
|
|
|
158
173
|
content: [{ type: 'text', text: 'Custom fields updated successfully' }],
|
|
159
174
|
};
|
|
160
175
|
});
|
|
176
|
+
server.registerTool('testcase_list_in_tree', {
|
|
177
|
+
title: 'List Test Cases in Tree',
|
|
178
|
+
description: 'List test cases for a project tree (Allure TestOps GET /api/v2/project/{projectId}/test-case/tree/tree-node). Requires treeId. Returns a tree node with paginated children; leaf nodes include testCaseId. Use parentNodeId to page into a folder.',
|
|
179
|
+
inputSchema: z.object({
|
|
180
|
+
projectId: z.number().describe('Project ID'),
|
|
181
|
+
treeId: z.number().describe('Test case tree ID'),
|
|
182
|
+
parentNodeId: z
|
|
183
|
+
.number()
|
|
184
|
+
.optional()
|
|
185
|
+
.describe('Parent folder node ID (omit for tree root)'),
|
|
186
|
+
search: z.string().optional().describe('Search filter'),
|
|
187
|
+
filterId: z.number().optional().describe('Saved filter ID'),
|
|
188
|
+
query: z.string().optional().describe('Query string (API `query`)'),
|
|
189
|
+
baseAql: z
|
|
190
|
+
.string()
|
|
191
|
+
.optional()
|
|
192
|
+
.describe('Base AQL applied on the server'),
|
|
193
|
+
page: z.number().optional().describe('Page index (0-based)'),
|
|
194
|
+
size: z.number().optional().describe('Page size'),
|
|
195
|
+
sort: z.string().optional().describe('Sort, e.g. name,ASC'),
|
|
196
|
+
}),
|
|
197
|
+
}, async (args) => {
|
|
198
|
+
const result = await listTestCasesInTree(args.projectId, args.treeId, args);
|
|
199
|
+
if (!isSuccess(result)) {
|
|
200
|
+
return {
|
|
201
|
+
content: [{ type: 'text', text: `Error: ${result.error.message}` }],
|
|
202
|
+
isError: true,
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
return {
|
|
206
|
+
content: [
|
|
207
|
+
{ type: 'text', text: JSON.stringify(result.value, null, 2) },
|
|
208
|
+
],
|
|
209
|
+
};
|
|
210
|
+
});
|
|
161
211
|
server.registerTool('testcase_search_by_aql', {
|
|
162
212
|
title: 'Search Test Cases by AQL',
|
|
163
213
|
description: 'Search test cases using AQL query',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../src/presentation/test-case/tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AACzB,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,uBAAuB,EACvB,0BAA0B,EAC1B,oBAAoB,
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../src/presentation/test-case/tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AACzB,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,uBAAuB,EACvB,0BAA0B,EAC1B,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,iCAAiC,CAAC;AAEzC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9B,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;CAC7E,CAAC,CAAC;AAEH,KAAK,UAAU,yBAAyB,CAAC,IAAoB;IAC3D,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClD,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;QACvB,OAAO;YACL,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAU,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE;aAClE;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IACD,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;aAC5C;SACF;KACF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,MAAiB,EAAE,EAAE;IACzD,MAAM,CAAC,YAAY,CACjB,cAAc,EACd;QACE,KAAK,EAAE,eAAe;QACtB,WAAW,EAAE,uBAAuB;QACpC,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;SACxC,CAAC;KACH,EACD,KAAK,EAAE,IAAoB,EAAE,EAAE;QAC7B,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1C,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;YACvB,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;gBACnE,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QACD,OAAO;YACL,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;aAC9D;SACF,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,qBAAqB,EACrB;QACE,KAAK,EAAE,sBAAsB;QAC7B,WAAW,EACT,qPAAqP;QACvP,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;QACnC,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;SACxC,CAAC;KACH,EACD,KAAK,EAAE,IAAoB,EAAE,EAAE;QAC7B,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChD,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;YACvB,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;gBACnE,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QACD,OAAO;YACL,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;aAC9D;SACF,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,uBAAuB,EACvB;QACE,KAAK,EAAE,wBAAwB;QAC/B,WAAW,EACT,iNAAiN;QACnN,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;QACnC,WAAW,EAAE,cAAc;KAC5B,EACD,yBAAyB,CAC1B,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,mBAAmB,EACnB;QACE,KAAK,EAAE,qBAAqB;QAC5B,WAAW,EACT,oIAAoI;QACtI,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;QACnC,WAAW,EAAE,cAAc;KAC5B,EACD,yBAAyB,CAC1B,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,sBAAsB,EACtB;QACE,KAAK,EAAE,sBAAsB;QAC7B,WAAW,EAAE,uCAAuC;QACpD,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;YAC/C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;YAChD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;YACvD,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;SACtE,CAAC;KACH,EACD,KAAK,EAAE,IAKN,EAAE,EAAE;QACH,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE;YACpE,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,cAAc,EAAE,IAAI,CAAC,cAAc;SACpC,CAAC,CAAC;QACH,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;YACvB,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;gBACnE,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QACD,OAAO;YACL,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;aAC9D;SACF,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,uBAAuB,EACvB;QACE,KAAK,EAAE,wBAAwB;QAC/B,WAAW,EAAE,2CAA2C;QACxD,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;YACvC,KAAK,EAAE,CAAC;iBACL,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;gBACP,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;gBAC1C,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;aAClE,CAAC,CACH;iBACA,QAAQ,CAAC,cAAc,CAAC;SAC5B,CAAC;KACH,EACD,KAAK,EAAE,IAGN,EAAE,EAAE;QACH,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9D,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;YACvB,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;gBACnE,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QACD,OAAO;YACL,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;aAC9D;SACF,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,4BAA4B,EAC5B;QACE,KAAK,EAAE,6BAA6B;QACpC,WAAW,EAAE,yCAAyC;QACtD,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;SACxC,CAAC;KACH,EACD,KAAK,EAAE,IAAoB,EAAE,EAAE;QAC7B,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACtD,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;YACvB,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;gBACnE,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QACD,OAAO;YACL,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;aAC9D;SACF,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,+BAA+B,EAC/B;QACE,KAAK,EAAE,gCAAgC;QACvC,WAAW,EAAE,4CAA4C;QACzD,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;YACvC,MAAM,EAAE,CAAC;iBACN,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;gBACP,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;gBACrD,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC;aAC3D,CAAC,CACH;iBACA,QAAQ,CAAC,yBAAyB,CAAC;SACvC,CAAC;KACH,EACD,KAAK,EAAE,IAGN,EAAE,EAAE;QACH,MAAM,MAAM,GAAG,MAAM,0BAA0B,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACtE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;YACvB,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;gBACnE,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QACD,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,oCAAoC,EAAE,CAAC;SACxE,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,uBAAuB,EACvB;QACE,KAAK,EAAE,yBAAyB;QAChC,WAAW,EACT,oPAAoP;QACtP,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;YAC5C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;YAChD,YAAY,EAAE,CAAC;iBACZ,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,4CAA4C,CAAC;YACzD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;YACvD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;YAC3D,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;YACnE,OAAO,EAAE,CAAC;iBACP,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,gCAAgC,CAAC;YAC7C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;YAC5D,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;YACjD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;SAC5D,CAAC;KACH,EACD,KAAK,EAAE,IAWN,EAAE,EAAE;QACH,MAAM,MAAM,GAAG,MAAM,mBAAmB,CACtC,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,MAAM,EACX,IAAI,CACL,CAAC;QACF,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;YACvB,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;gBACnE,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QACD,OAAO;YACL,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;aAC9D;SACF,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,wBAAwB,EACxB;QACE,KAAK,EAAE,0BAA0B;QACjC,WAAW,EAAE,mCAAmC;QAChD,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;YAC5C,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;YACrC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;YAC3D,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;YACnD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;YACjD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;SACtD,CAAC;KACH,EACD,KAAK,EAAE,IAON,EAAE,EAAE;QACH,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC1E,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;YACvB,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;gBACnE,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QACD,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;wBACE,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS;wBACjC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK;wBACzB,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI;wBACvB,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI;qBACxB,EACD,IAAI,EACJ,CAAC,CACF;iBACF;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC,CAAC"}
|