@syn7xx/testops-mcp-server 0.1.2 → 0.1.4
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 +45 -0
- package/README.md +143 -89
- package/dist/args.d.ts +2 -3
- package/dist/args.d.ts.map +1 -1
- package/dist/args.js +57 -19
- package/dist/args.js.map +1 -1
- package/dist/domain/project/service.d.ts.map +1 -1
- package/dist/domain/project/service.js +1 -1
- package/dist/domain/project/service.js.map +1 -1
- package/dist/domain/project/types.d.ts.map +1 -1
- package/dist/domain/test-case/service.d.ts.map +1 -1
- package/dist/domain/test-case/service.js +3 -1
- package/dist/domain/test-case/service.js.map +1 -1
- package/dist/domain/test-case/types.d.ts.map +1 -1
- package/dist/domain/test-plan/service.d.ts.map +1 -1
- package/dist/domain/test-plan/service.js +1 -1
- package/dist/domain/test-plan/service.js.map +1 -1
- package/dist/domain/test-plan/types.d.ts.map +1 -1
- package/dist/presentation/project/tools.d.ts +2 -1
- package/dist/presentation/project/tools.d.ts.map +1 -1
- package/dist/presentation/project/tools.js +30 -8
- package/dist/presentation/project/tools.js.map +1 -1
- package/dist/presentation/test-case/tools.d.ts +2 -1
- package/dist/presentation/test-case/tools.d.ts.map +1 -1
- package/dist/presentation/test-case/tools.js +77 -21
- package/dist/presentation/test-case/tools.js.map +1 -1
- package/dist/presentation/test-plan/tools.d.ts +2 -1
- package/dist/presentation/test-plan/tools.d.ts.map +1 -1
- package/dist/presentation/test-plan/tools.js +17 -5
- package/dist/presentation/test-plan/tools.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +8 -5
- package/dist/server.js.map +1 -1
- package/dist/shared/api.d.ts +2 -4
- package/dist/shared/api.d.ts.map +1 -1
- package/dist/shared/api.js +34 -31
- package/dist/shared/api.js.map +1 -1
- package/dist/shared/pagination.d.ts.map +1 -1
- package/dist/shared/pagination.js.map +1 -1
- package/dist/shared/result.d.ts.map +1 -1
- package/dist/shared/result.js +7 -4
- package/dist/shared/result.js.map +1 -1
- package/package.json +18 -4
- package/dist/services/config.d.ts +0 -43
- package/dist/services/config.d.ts.map +0 -1
- package/dist/services/config.js +0 -99
- package/dist/services/config.js.map +0 -1
- package/dist/services/index.d.ts +0 -8
- package/dist/services/index.d.ts.map +0 -1
- package/dist/services/index.js +0 -8
- package/dist/services/index.js.map +0 -1
- package/dist/services/project.d.ts +0 -17
- package/dist/services/project.d.ts.map +0 -1
- package/dist/services/project.js +0 -27
- package/dist/services/project.js.map +0 -1
- package/dist/services/test-case.d.ts +0 -59
- package/dist/services/test-case.d.ts.map +0 -1
- package/dist/services/test-case.js +0 -138
- package/dist/services/test-case.js.map +0 -1
- package/dist/services/test-plan.d.ts +0 -20
- package/dist/services/test-plan.d.ts.map +0 -1
- package/dist/services/test-plan.js +0 -18
- package/dist/services/test-plan.js.map +0 -1
- package/dist/services/testops-client.d.ts +0 -96
- package/dist/services/testops-client.d.ts.map +0 -1
- package/dist/services/testops-client.js +0 -392
- package/dist/services/testops-client.js.map +0 -1
- package/dist/services/testops-types.d.ts +0 -62
- package/dist/services/testops-types.d.ts.map +0 -1
- package/dist/services/testops-types.js +0 -3
- package/dist/services/testops-types.js.map +0 -1
- package/dist/tools/index.d.ts +0 -8
- package/dist/tools/index.d.ts.map +0 -1
- package/dist/tools/index.js +0 -8
- package/dist/tools/index.js.map +0 -1
- package/dist/tools/project.d.ts +0 -5
- package/dist/tools/project.d.ts.map +0 -1
- package/dist/tools/project.js +0 -62
- package/dist/tools/project.js.map +0 -1
- package/dist/tools/test-case.d.ts +0 -5
- package/dist/tools/test-case.d.ts.map +0 -1
- package/dist/tools/test-case.js +0 -185
- package/dist/tools/test-case.js.map +0 -1
- package/dist/tools/test-plan.d.ts +0 -5
- package/dist/tools/test-plan.d.ts.map +0 -1
- package/dist/tools/test-plan.js +0 -57
- package/dist/tools/test-plan.js.map +0 -1
- package/dist/tools/testops.d.ts +0 -6
- package/dist/tools/testops.d.ts.map +0 -1
- package/dist/tools/testops.js +0 -302
- package/dist/tools/testops.js.map +0 -1
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project are documented in this file.
|
|
4
|
+
|
|
5
|
+
The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
|
6
|
+
On each release, [release-it](https://github.com/release-it/release-it) with `@release-it/conventional-changelog` prepends new sections from [Conventional Commits](https://www.conventionalcommits.org/) since the previous tag.
|
|
7
|
+
|
|
8
|
+
## [Unreleased]
|
|
9
|
+
|
|
10
|
+
## [0.1.3] - 2026-04-03
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- CI (lint, build on push); GitHub Actions **Release** workflow with `release-it`
|
|
15
|
+
- ESLint 9 (flat config), Prettier, `typescript-eslint`
|
|
16
|
+
- CLI parsing via `node:util` / `parseArgs`; short flags `-u` / `-t` / `-h`; validation of `http(s)` base URL
|
|
17
|
+
- HTTP 401 handling: clear JWT cache and retry once
|
|
18
|
+
- `CHANGELOG.md` in published npm package; maintainer notes in README (Release workflow, conventional commits)
|
|
19
|
+
|
|
20
|
+
### Changed
|
|
21
|
+
|
|
22
|
+
- README: MCP setup for Cursor, VS Code (`servers`), OpenCode (`mcp` + `type: local`), Claude; **Releasing** section
|
|
23
|
+
- CI: npm publish removed from default pipeline (publish only via **Release** + `release-it`)
|
|
24
|
+
|
|
25
|
+
## [0.1.2] - 2026-04-03
|
|
26
|
+
|
|
27
|
+
### Fixed
|
|
28
|
+
|
|
29
|
+
- Add shebang for the `testops-mcp-server` CLI binary
|
|
30
|
+
|
|
31
|
+
### Changed
|
|
32
|
+
|
|
33
|
+
- OpenCode: document using `TESTOPS_URL` / `TESTOPS_TOKEN` in env in MCP config
|
|
34
|
+
|
|
35
|
+
## [0.1.0-alpha.2] - 2026-04-03
|
|
36
|
+
|
|
37
|
+
### Added
|
|
38
|
+
|
|
39
|
+
- `bin` field in `package.json` for the CLI executable
|
|
40
|
+
|
|
41
|
+
## [0.1.0] - 2026-04-03
|
|
42
|
+
|
|
43
|
+
### Added
|
|
44
|
+
|
|
45
|
+
- Initial **TestOps MCP Server**: tools for projects, test plans, and test cases; API client with JWT; stdio transport
|
package/README.md
CHANGED
|
@@ -16,6 +16,9 @@ Or use directly via npx:
|
|
|
16
16
|
npx @syn7xx/testops-mcp-server --url <testops-url> --token <api-token>
|
|
17
17
|
```
|
|
18
18
|
|
|
19
|
+
Short flags: `-u` / `-t` / `-h` (same as `--url`, `--token`, `--help`).
|
|
20
|
+
Environment variables: `TESTOPS_URL`, `TESTOPS_TOKEN` (used when flags are omitted).
|
|
21
|
+
|
|
19
22
|
## Build
|
|
20
23
|
|
|
21
24
|
```bash
|
|
@@ -34,125 +37,116 @@ Or with npx (if not installed globally):
|
|
|
34
37
|
npx @syn7xx/testops-mcp-server --url <testops-url> --token <api-token>
|
|
35
38
|
```
|
|
36
39
|
|
|
37
|
-
##
|
|
38
|
-
|
|
39
|
-
### Project
|
|
40
|
-
| Tool | Description |
|
|
41
|
-
|------|-------------|
|
|
42
|
-
| `project_list` | List projects with pagination |
|
|
43
|
-
| `project_find_by_name` | Find project by exact or partial name match |
|
|
44
|
-
| `project_get_by_id` | Get project by ID |
|
|
45
|
-
|
|
46
|
-
### Test Plan
|
|
47
|
-
| Tool | Description |
|
|
48
|
-
|------|-------------|
|
|
49
|
-
| `testplan_get` | Get test plan by ID |
|
|
50
|
-
| `testplan_get_test_cases` | Get test cases from test plan with pagination |
|
|
40
|
+
## MCP setup in AI tools
|
|
51
41
|
|
|
52
|
-
|
|
53
|
-
| Tool | Description |
|
|
54
|
-
|------|-------------|
|
|
55
|
-
| `testcase_get` | Get test case by ID |
|
|
56
|
-
| `testcase_get_detail` | Get test case with steps and custom fields |
|
|
57
|
-
| `testcase_get_scenario` | Get scenario (steps and expected results) |
|
|
58
|
-
| `testcase_update_step` | Update a step in scenario |
|
|
59
|
-
| `testcase_set_scenario` | Replace all steps in scenario |
|
|
60
|
-
| `testcase_get_custom_fields` | Get custom field values |
|
|
61
|
-
| `testcase_update_custom_fields` | Update custom field values |
|
|
62
|
-
| `testcase_search_by_aql` | Search test cases using AQL |
|
|
63
|
-
|
|
64
|
-
## Project Structure
|
|
65
|
-
|
|
66
|
-
```
|
|
67
|
-
src/
|
|
68
|
-
├── shared/ # Utilities (Result, pagination, API client)
|
|
69
|
-
├── domain/ # Business logic (project, test-plan, test-case)
|
|
70
|
-
├── presentation/ # MCP tools
|
|
71
|
-
├── index.ts # Entry point
|
|
72
|
-
└── server.ts # MCP server configuration
|
|
73
|
-
```
|
|
42
|
+
Configs differ by product:
|
|
74
43
|
|
|
75
|
-
|
|
76
|
-
|
|
44
|
+
| Product | Typical config file | Root key | Notes |
|
|
45
|
+
|--------|---------------------|----------|--------|
|
|
46
|
+
| Cursor, Windsurf, Kilo Code, Zed | `mcp.json` (paths vary) | **`mcpServers`** | `command` + `args` |
|
|
47
|
+
| **Visual Studio Code** | `.vscode/mcp.json` or user MCP config | **`servers`** | [Official docs](https://code.visualstudio.com/docs/copilot/chat/mcp-servers) — not `mcpServers` |
|
|
48
|
+
| Claude Desktop | `claude_desktop_config.json` | **`mcpServers`** | Same idea as Cursor |
|
|
49
|
+
| **OpenCode** | `opencode.jsonc` (project or [user config](https://open-code.ai/en/docs/config)) | **`mcp`** | **`type: "local"`**, `command` as **array**, env under **`environment`** |
|
|
77
50
|
|
|
78
|
-
|
|
51
|
+
Do **not** commit real tokens; use env vars or local-only config.
|
|
79
52
|
|
|
80
|
-
|
|
81
|
-
npm install -g @syn7xx/testops-mcp-server
|
|
82
|
-
```
|
|
53
|
+
### Cursor, Windsurf, Kilo Code, Zed
|
|
83
54
|
|
|
84
|
-
|
|
55
|
+
These use top-level **`mcpServers`**, each entry has **`command`** (string) and **`args`** (array).
|
|
85
56
|
|
|
86
|
-
|
|
57
|
+
**Cursor** — `~/.cursor/mcp.json` or project `.cursor/mcp.json`:
|
|
87
58
|
|
|
88
59
|
```json
|
|
89
60
|
{
|
|
90
61
|
"mcpServers": {
|
|
91
62
|
"testops": {
|
|
92
63
|
"command": "npx",
|
|
93
|
-
"args": [
|
|
64
|
+
"args": [
|
|
65
|
+
"-y",
|
|
66
|
+
"@syn7xx/testops-mcp-server",
|
|
67
|
+
"--url",
|
|
68
|
+
"https://your-testops.com",
|
|
69
|
+
"--token",
|
|
70
|
+
"your-token"
|
|
71
|
+
]
|
|
94
72
|
}
|
|
95
73
|
}
|
|
96
74
|
}
|
|
97
75
|
```
|
|
98
76
|
|
|
99
|
-
|
|
77
|
+
**Windsurf** — `~/.config/windsurf/mcp.json` or project `.windsurf/mcp.json` (same structure).
|
|
100
78
|
|
|
101
|
-
|
|
79
|
+
**Kilo Code** — `~/.kilocode/mcp.json` or project `.kilocode/mcp.json` (same structure).
|
|
102
80
|
|
|
103
|
-
|
|
104
|
-
{
|
|
105
|
-
"mcpServers": {
|
|
106
|
-
"testops": {
|
|
107
|
-
"command": "npx",
|
|
108
|
-
"args": ["@syn7xx/testops-mcp-server", "--url", "https://your-testops.com", "--token", "your-token"]
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
```
|
|
81
|
+
**Zed** — `~/.config/zed/mcp.json` (same structure).
|
|
113
82
|
|
|
114
|
-
###
|
|
83
|
+
### Visual Studio Code
|
|
115
84
|
|
|
116
|
-
|
|
85
|
+
VS Code stores MCP config in **`mcp.json`** with top-level **`servers`**, not `mcpServers` (see [Add and manage MCP servers in VS Code](https://code.visualstudio.com/docs/copilot/chat/mcp-servers) and the [MCP configuration reference](https://code.visualstudio.com/docs/copilot/reference/mcp-configuration)).
|
|
86
|
+
|
|
87
|
+
Workspace file: **`.vscode/mcp.json`**, or run **MCP: Open User Configuration** for a global file.
|
|
117
88
|
|
|
118
89
|
```json
|
|
119
90
|
{
|
|
120
|
-
"
|
|
91
|
+
"servers": {
|
|
121
92
|
"testops": {
|
|
122
93
|
"command": "npx",
|
|
123
|
-
"args": [
|
|
94
|
+
"args": [
|
|
95
|
+
"-y",
|
|
96
|
+
"@syn7xx/testops-mcp-server",
|
|
97
|
+
"--url",
|
|
98
|
+
"https://your-testops.com",
|
|
99
|
+
"--token",
|
|
100
|
+
"your-token"
|
|
101
|
+
]
|
|
124
102
|
}
|
|
125
103
|
}
|
|
126
104
|
}
|
|
127
105
|
```
|
|
128
106
|
|
|
107
|
+
For sensitive values, prefer [input variables](https://code.visualstudio.com/docs/copilot/reference/mcp-configuration#_input-variables-for-sensitive-data) or env files as described in the reference.
|
|
108
|
+
|
|
129
109
|
### OpenCode
|
|
130
110
|
|
|
131
|
-
|
|
111
|
+
OpenCode does **not** use `mcpServers`. Define servers under **`mcp`**, set **`type: "local"`**, pass the process as a **`command`** array (e.g. `npx`, `-y`, `@syn7xx/testops-mcp-server`, …), and optional env in **`environment`** (not `env`). See [OpenCode MCP servers](https://open-code.ai/docs/en/mcp-servers).
|
|
132
112
|
|
|
133
|
-
|
|
113
|
+
Example — `opencode.jsonc` in the project root or in the [global OpenCode config](https://open-code.ai/en/docs/config):
|
|
114
|
+
|
|
115
|
+
```jsonc
|
|
134
116
|
{
|
|
135
|
-
"
|
|
117
|
+
"$schema": "https://opencode.ai/config.json",
|
|
118
|
+
"mcp": {
|
|
136
119
|
"testops": {
|
|
137
|
-
"
|
|
138
|
-
"
|
|
139
|
-
|
|
140
|
-
"
|
|
141
|
-
"
|
|
142
|
-
|
|
120
|
+
"type": "local",
|
|
121
|
+
"command": [
|
|
122
|
+
"npx",
|
|
123
|
+
"-y",
|
|
124
|
+
"@syn7xx/testops-mcp-server",
|
|
125
|
+
"--url",
|
|
126
|
+
"https://your-testops.com",
|
|
127
|
+
"--token",
|
|
128
|
+
"your-token"
|
|
129
|
+
],
|
|
130
|
+
"enabled": true
|
|
143
131
|
}
|
|
144
132
|
}
|
|
145
133
|
}
|
|
146
134
|
```
|
|
147
135
|
|
|
148
|
-
|
|
136
|
+
Using environment variables instead of flags:
|
|
149
137
|
|
|
150
|
-
```
|
|
138
|
+
```jsonc
|
|
151
139
|
{
|
|
152
|
-
"
|
|
140
|
+
"$schema": "https://opencode.ai/config.json",
|
|
141
|
+
"mcp": {
|
|
153
142
|
"testops": {
|
|
154
|
-
"
|
|
155
|
-
"
|
|
143
|
+
"type": "local",
|
|
144
|
+
"command": ["npx", "-y", "@syn7xx/testops-mcp-server"],
|
|
145
|
+
"environment": {
|
|
146
|
+
"TESTOPS_URL": "https://your-testops.com",
|
|
147
|
+
"TESTOPS_TOKEN": "your-token"
|
|
148
|
+
},
|
|
149
|
+
"enabled": true
|
|
156
150
|
}
|
|
157
151
|
}
|
|
158
152
|
}
|
|
@@ -160,34 +154,94 @@ Or using command with inline arguments:
|
|
|
160
154
|
|
|
161
155
|
### Claude Desktop
|
|
162
156
|
|
|
163
|
-
|
|
157
|
+
**macOS** — `~/Library/Application Support/Claude/claude_desktop_config.json`:
|
|
164
158
|
|
|
165
159
|
```json
|
|
166
160
|
{
|
|
167
161
|
"mcpServers": {
|
|
168
162
|
"testops": {
|
|
169
163
|
"command": "npx",
|
|
170
|
-
"args": [
|
|
164
|
+
"args": [
|
|
165
|
+
"@syn7xx/testops-mcp-server",
|
|
166
|
+
"--url",
|
|
167
|
+
"https://your-testops.com",
|
|
168
|
+
"--token",
|
|
169
|
+
"your-token"
|
|
170
|
+
]
|
|
171
171
|
}
|
|
172
172
|
}
|
|
173
173
|
}
|
|
174
174
|
```
|
|
175
175
|
|
|
176
|
-
|
|
176
|
+
On **Windows**, the config lives under `%APPDATA%\Claude\` — see Anthropic’s Claude Desktop documentation for the exact path.
|
|
177
177
|
|
|
178
|
-
|
|
178
|
+
### Global install (optional)
|
|
179
|
+
|
|
180
|
+
If you prefer a fixed binary path instead of `npx`:
|
|
181
|
+
|
|
182
|
+
```bash
|
|
183
|
+
npm install -g @syn7xx/testops-mcp-server
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
Then use `"command": "testops-mcp-server"` and `"args": ["--url", "...", "--token", "..."]` under **`mcpServers`** (Cursor, Claude, …) or **`servers`** (VS Code), or the **`command`** array in OpenCode.
|
|
187
|
+
|
|
188
|
+
## Tools
|
|
189
|
+
|
|
190
|
+
### Project
|
|
191
|
+
|
|
192
|
+
| Tool | Description |
|
|
193
|
+
|------|-------------|
|
|
194
|
+
| `project_list` | List projects with pagination |
|
|
195
|
+
| `project_find_by_name` | Find project by exact or partial name match |
|
|
196
|
+
| `project_get_by_id` | Get project by ID |
|
|
197
|
+
|
|
198
|
+
### Test Plan
|
|
199
|
+
|
|
200
|
+
| Tool | Description |
|
|
201
|
+
|------|-------------|
|
|
202
|
+
| `testplan_get` | Get test plan by ID |
|
|
203
|
+
| `testplan_get_test_cases` | Get test cases from test plan with pagination |
|
|
204
|
+
|
|
205
|
+
### Test Case
|
|
206
|
+
|
|
207
|
+
| Tool | Description |
|
|
208
|
+
|------|-------------|
|
|
209
|
+
| `testcase_get` | Get test case by ID |
|
|
210
|
+
| `testcase_get_detail` | Get test case with steps and custom fields |
|
|
211
|
+
| `testcase_get_scenario` | Get scenario (steps and expected results) |
|
|
212
|
+
| `testcase_update_step` | Update a step in scenario |
|
|
213
|
+
| `testcase_set_scenario` | Replace all steps in scenario |
|
|
214
|
+
| `testcase_get_custom_fields` | Get custom field values |
|
|
215
|
+
| `testcase_update_custom_fields` | Update custom field values |
|
|
216
|
+
| `testcase_search_by_aql` | Search test cases using AQL |
|
|
217
|
+
|
|
218
|
+
## Project Structure
|
|
179
219
|
|
|
180
|
-
```json
|
|
181
|
-
{
|
|
182
|
-
"mcpServers": {
|
|
183
|
-
"testops": {
|
|
184
|
-
"command": "npx",
|
|
185
|
-
"args": ["@syn7xx/testops-mcp-server", "--url", "https://your-testops.com", "--token", "your-token"]
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
220
|
```
|
|
190
|
-
|
|
221
|
+
src/
|
|
222
|
+
├── shared/ # Utilities (Result, pagination, API client)
|
|
223
|
+
├── domain/ # Business logic (project, test-plan, test-case)
|
|
224
|
+
├── presentation/ # MCP tools
|
|
225
|
+
├── index.ts # Entry point
|
|
226
|
+
└── server.ts # MCP server configuration
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
## Releasing
|
|
230
|
+
|
|
231
|
+
Publishing to **npm** is only via the GitHub Actions workflow **Release** (`release-it`). The **CI** workflow only runs lint and build.
|
|
232
|
+
|
|
233
|
+
**This workflow does not run on `git push`.** It is triggered **only** when someone opens **Actions → Release → Run workflow**, selects branch **`main`**, and chooses **patch** / **minor** / **major**. A plain merge or push to `main` will not start `release-it` (by design, so every commit does not bump the version).
|
|
234
|
+
|
|
235
|
+
Steps:
|
|
236
|
+
|
|
237
|
+
1. Repository secret **`NPM_TOKEN`** (npm token with publish access for `@syn7xx`).
|
|
238
|
+
2. **Actions** tab → **Release** in the left list → **Run workflow** → branch **main** → run.
|
|
239
|
+
|
|
240
|
+
That bumps `package.json`, updates **`CHANGELOG.md`** (from conventional commits since the last tag), creates a git tag, pushes to `main`, and runs **`npm publish`**. Use commit messages like `feat: ...`, `fix: ...`, `chore: ...` so the changelog has meaningful entries. Locally you can use `npm run release` (interactive) or `npm run release:patch` / `:minor` / `:major` instead.
|
|
241
|
+
|
|
242
|
+
If you do not want a changelog at all, remove the `@release-it/conventional-changelog` plugin from `release-it.json` and delete `CHANGELOG.md`.
|
|
243
|
+
|
|
244
|
+
If the **Release** workflow is missing in **Actions**, ensure `.github/workflows/release.yml` is on the **default branch** and that Actions are allowed in the repository **Settings → Actions → General**.
|
|
191
245
|
|
|
192
246
|
## License
|
|
193
247
|
|
package/dist/args.d.ts
CHANGED
|
@@ -3,9 +3,8 @@ export type TestOpsServerArgs = {
|
|
|
3
3
|
token: string;
|
|
4
4
|
};
|
|
5
5
|
/**
|
|
6
|
-
* Parse
|
|
7
|
-
*
|
|
8
|
-
* Base URL is stored without a trailing slash.
|
|
6
|
+
* Parse argv with `node:util` parseArgs (strict: unknown flags and positionals are rejected),
|
|
7
|
+
* then merge env TESTOPS_URL / TESTOPS_TOKEN. Base URL is trimmed and has trailing slashes removed.
|
|
9
8
|
*/
|
|
10
9
|
export declare function parseTestOpsServerArgs(argv: string[]): TestOpsServerArgs;
|
|
11
10
|
//# sourceMappingURL=args.d.ts.map
|
package/dist/args.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,iBAAiB,GAAG;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAoCF;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,iBAAiB,CAqCxE"}
|
package/dist/args.js
CHANGED
|
@@ -1,29 +1,67 @@
|
|
|
1
|
+
import { parseArgs } from 'node:util';
|
|
2
|
+
const usage = `Usage: testops-mcp-server --url <BASE_URL> --token <API_TOKEN>
|
|
3
|
+
testops-mcp-server -u <BASE_URL> -t <API_TOKEN>
|
|
4
|
+
testops-mcp-server --url=<BASE> --token=<TOKEN>
|
|
5
|
+
Environment: TESTOPS_URL, TESTOPS_TOKEN (used if CLI flags are omitted)
|
|
6
|
+
CLI flags override environment variables when both are set.`;
|
|
7
|
+
function printCliError(err) {
|
|
8
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
9
|
+
console.error(msg);
|
|
10
|
+
console.error(usage);
|
|
11
|
+
process.exit(1);
|
|
12
|
+
}
|
|
13
|
+
function normalizeBaseUrl(raw) {
|
|
14
|
+
const s = raw.trim();
|
|
15
|
+
let parsed;
|
|
16
|
+
try {
|
|
17
|
+
parsed = new URL(s);
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
console.error('Invalid --url / TESTOPS_URL: expected an absolute http(s) URL (e.g. https://testops.example.com)\n' +
|
|
21
|
+
usage);
|
|
22
|
+
process.exit(1);
|
|
23
|
+
}
|
|
24
|
+
if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') {
|
|
25
|
+
console.error('Invalid --url: only http: and https: are supported\n' + usage);
|
|
26
|
+
process.exit(1);
|
|
27
|
+
}
|
|
28
|
+
return s.replace(/\/+$/, '');
|
|
29
|
+
}
|
|
1
30
|
/**
|
|
2
|
-
* Parse
|
|
3
|
-
*
|
|
4
|
-
* Base URL is stored without a trailing slash.
|
|
31
|
+
* Parse argv with `node:util` parseArgs (strict: unknown flags and positionals are rejected),
|
|
32
|
+
* then merge env TESTOPS_URL / TESTOPS_TOKEN. Base URL is trimmed and has trailing slashes removed.
|
|
5
33
|
*/
|
|
6
34
|
export function parseTestOpsServerArgs(argv) {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
}
|
|
35
|
+
let values;
|
|
36
|
+
try {
|
|
37
|
+
({ values } = parseArgs({
|
|
38
|
+
args: argv.slice(2),
|
|
39
|
+
options: {
|
|
40
|
+
url: { type: 'string', short: 'u' },
|
|
41
|
+
token: { type: 'string', short: 't' },
|
|
42
|
+
help: { type: 'boolean', short: 'h' },
|
|
43
|
+
},
|
|
44
|
+
allowPositionals: false,
|
|
45
|
+
strict: true,
|
|
46
|
+
}));
|
|
47
|
+
}
|
|
48
|
+
catch (err) {
|
|
49
|
+
printCliError(err);
|
|
50
|
+
}
|
|
51
|
+
if (values.help) {
|
|
52
|
+
console.log(usage);
|
|
53
|
+
process.exit(0);
|
|
19
54
|
}
|
|
20
|
-
|
|
21
|
-
|
|
55
|
+
const urlRaw = values.url ?? process.env.TESTOPS_URL;
|
|
56
|
+
const tokenRaw = values.token ?? process.env.TESTOPS_TOKEN;
|
|
57
|
+
if (!urlRaw?.trim() || !tokenRaw?.trim()) {
|
|
58
|
+
console.error('Required: --url / -u and --token / -t (or env TESTOPS_URL, TESTOPS_TOKEN)\n\n' +
|
|
59
|
+
usage);
|
|
22
60
|
process.exit(1);
|
|
23
61
|
}
|
|
24
62
|
return {
|
|
25
|
-
url:
|
|
26
|
-
token:
|
|
63
|
+
url: normalizeBaseUrl(urlRaw),
|
|
64
|
+
token: tokenRaw.trim(),
|
|
27
65
|
};
|
|
28
66
|
}
|
|
29
67
|
//# sourceMappingURL=args.js.map
|
package/dist/args.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"args.js","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"args.js","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAOtC,MAAM,KAAK,GAAG;;;;4DAI8C,CAAC;AAE7D,SAAS,aAAa,CAAC,GAAY;IACjC,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC7D,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAW;IACnC,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IACrB,IAAI,MAAW,CAAC;IAChB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;IACtB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,KAAK,CACX,oGAAoG;YAClG,KAAK,CACR,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAChE,OAAO,CAAC,KAAK,CACX,sDAAsD,GAAG,KAAK,CAC/D,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAC/B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAAc;IACnD,IAAI,MAAwD,CAAC;IAC7D,IAAI,CAAC;QACH,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;YACtB,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YACnB,OAAO,EAAE;gBACP,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE;gBACnC,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE;gBACrC,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE;aACtC;YACD,gBAAgB,EAAE,KAAK;YACvB,MAAM,EAAE,IAAI;SACb,CAAC,CAAC,CAAC;IACN,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,aAAa,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;IACrD,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;IAE3D,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC;QACzC,OAAO,CAAC,KAAK,CACX,+EAA+E;YAC7E,KAAK,CACR,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO;QACL,GAAG,EAAE,gBAAgB,CAAC,MAAM,CAAC;QAC7B,KAAK,EAAE,QAAQ,CAAC,IAAI,EAAE;KACvB,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../src/domain/project/service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAO,MAAM,wBAAwB,CAAC;AACrD,OAAO,
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../src/domain/project/service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAO,MAAM,wBAAwB,CAAC;AACrD,OAAO,EACL,UAAU,EAGV,KAAK,SAAS,EACf,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,OAAO,EAAqB,MAAM,YAAY,CAAC;AAS7D;;;;GAIG;AACH,eAAO,MAAM,YAAY,GACvB,SAAS,UAAU,KAClB,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAiB3C,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,GAC5B,MAAM,MAAM,KACX,OAAO,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI,EAAE,KAAK,CAAC,CAyBvC,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,cAAc,GACzB,IAAI,MAAM,KACT,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAGhC,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { apiGet } from '../../shared/api.js';
|
|
2
2
|
import { map } from '../../shared/result.js';
|
|
3
|
-
import { normalizePageParams, createPaginated } from '../../shared/pagination.js';
|
|
3
|
+
import { normalizePageParams, createPaginated, } from '../../shared/pagination.js';
|
|
4
4
|
/**
|
|
5
5
|
* Find all projects with pagination
|
|
6
6
|
* @param params - Pagination parameters (page, size, sort)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/domain/project/service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAU,GAAG,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/domain/project/service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAU,GAAG,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAEL,mBAAmB,EACnB,eAAe,GAEhB,MAAM,4BAA4B,CAAC;AAUpC;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAC/B,MAAmB,EACyB,EAAE;IAC9C,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAEzD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAwB,cAAc,EAAE;QACnE,IAAI;QACJ,IAAI;QACJ,IAAI;KACL,CAAC,CAAC;IAEH,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CAC5B,eAAe,CACb,IAAI,CAAC,OAAO,IAAI,EAAE,EAClB,IAAI,CAAC,MAAM,IAAI,IAAI,EACnB,IAAI,CAAC,IAAI,IAAI,IAAI,EACjB,IAAI,CAAC,aAAa,CACnB,CACF,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,EACpC,IAAY,EAC4B,EAAE;IAC1C,MAAM,QAAQ,GAAG,MAAM,MAAM,CAC3B,sBAAsB,EACtB;QACE,KAAK,EAAE,IAAI;QACX,IAAI,EAAE,EAAE;KACT,CACF,CAAC;IAEF,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE;QAC5B,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;QACvC,IAAI,CAAC,WAAW,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QAErC,cAAc;QACd,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAC5B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,WAAW,EAAE,CACnD,CAAC;QACF,IAAI,KAAK;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;QAErD,gBAAgB;QAChB,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CACrC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAClD,CAAC;QACF,OAAO,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACjE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EACjC,EAAU,EACuB,EAAE;IACnC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAU,gBAAgB,EAAE,EAAE,CAAC,CAAC;IAC7D,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC;AAC7C,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/domain/project/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,OAAO;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/domain/project/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd"}
|
|
@@ -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,
|
|
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"}
|
|
@@ -80,7 +80,9 @@ export const updateScenarioStep = async (testCaseId, stepId, data) => {
|
|
|
80
80
|
body.body = data.body;
|
|
81
81
|
if (data.expectedResult !== undefined)
|
|
82
82
|
body.expectedResult = data.expectedResult;
|
|
83
|
-
return apiPatch(`/api/testcase/step/${stepId}`, body, {
|
|
83
|
+
return apiPatch(`/api/testcase/step/${stepId}`, body, {
|
|
84
|
+
withExpectedResult: true,
|
|
85
|
+
});
|
|
84
86
|
};
|
|
85
87
|
/**
|
|
86
88
|
* Replace entire scenario with new steps
|
|
@@ -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,
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/domain/test-case/service.ts"],"names":[],"mappings":"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"}
|
|
@@ -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;
|
|
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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../src/domain/test-plan/service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAO,MAAM,wBAAwB,CAAC;AAErD,OAAO,
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../src/domain/test-plan/service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAO,MAAM,wBAAwB,CAAC;AAErD,OAAO,EACL,UAAU,EAEV,KAAK,SAAS,EACf,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAS7D;;;;GAIG;AACH,eAAO,MAAM,WAAW,GACtB,IAAI,MAAM,KACT,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAEjC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,GAC/B,YAAY,MAAM,EAClB,SAAS,UAAU,KAClB,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,EAAE,KAAK,CAAC,CAgBpD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,eAAe,GAC1B,YAAY,MAAM,KACjB,OAAO,CACR,MAAM,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAAE,KAAK,CAAC,CAGjE,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,YAAY,GACvB,YAAY,MAAM,KACjB,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAEjC,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { apiGet } from '../../shared/api.js';
|
|
2
2
|
import { map } from '../../shared/result.js';
|
|
3
3
|
import { createPaginated } from '../../shared/pagination.js';
|
|
4
|
-
import { normalizePageParams } from '../../shared/pagination.js';
|
|
4
|
+
import { normalizePageParams, } from '../../shared/pagination.js';
|
|
5
5
|
/**
|
|
6
6
|
* Get a test plan by ID
|
|
7
7
|
* @param id - Test plan ID
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/domain/test-plan/service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAU,GAAG,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/domain/test-plan/service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAU,GAAG,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAEL,mBAAmB,GAEpB,MAAM,4BAA4B,CAAC;AAUpC;;;;GAIG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,EAC9B,EAAU,EACwB,EAAE;IACpC,OAAO,MAAM,CAAW,iBAAiB,EAAE,EAAE,CAAC,CAAC;AACjD,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,EACvC,UAAkB,EAClB,MAAmB,EACkC,EAAE;IACvD,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAEzD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAC3B,iBAAiB,UAAU,YAAY,EACvC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,IAAI,UAAU,EAAE,CACzC,CAAC;IAEF,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CAC5B,eAAe,CACb,IAAI,CAAC,OAAO,IAAI,EAAE,EAClB,IAAI,CAAC,MAAM,IAAI,IAAI,EACnB,IAAI,CAAC,IAAI,IAAI,IAAI,EACjB,IAAI,CAAC,aAAa,CACnB,CACF,CAAC;AACJ,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,EAClC,UAAkB,EAGlB,EAAE;IACF,OAAO,MAAM,CAAC,iBAAiB,UAAU,OAAO,CAAC,CAAC;AACpD,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAC/B,UAAkB,EACgB,EAAE;IACpC,OAAO,MAAM,CAAW,iBAAiB,UAAU,OAAO,CAAC,CAAC;AAC9D,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/domain/test-plan/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,QAAQ;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/domain/test-plan/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,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;CACf"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../src/presentation/project/tools.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../src/presentation/project/tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAS9D,eAAO,MAAM,oBAAoB,GAAI,QAAQ,SAAS,SAuGrD,CAAC"}
|