@smartbear/mcp 0.11.0 → 0.12.0
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/README.md +1 -1
- package/dist/bugsnag/client/api/Error.js +1 -1
- package/dist/bugsnag/client/api/Project.js +152 -0
- package/dist/bugsnag/client/api/api.js +130 -3
- package/dist/bugsnag/client/api/base.js +19 -0
- package/dist/bugsnag/client/api/index.js +1 -1
- package/dist/bugsnag/client.js +514 -11
- package/dist/bugsnag/input-schemas.js +14 -6
- package/dist/common/transport-stdio.js +5 -0
- package/dist/qmetry/client/auto-resolve.js +10 -0
- package/dist/qmetry/client/automation.js +171 -0
- package/dist/qmetry/client/handlers.js +9 -2
- package/dist/qmetry/client/project.js +87 -1
- package/dist/qmetry/client/testsuite.js +37 -1
- package/dist/qmetry/client/tools/automation-tools.js +290 -0
- package/dist/qmetry/client/tools/index.js +3 -0
- package/dist/qmetry/client/tools/issue-tools.js +1 -1
- package/dist/qmetry/client/tools/project-tools.js +311 -1
- package/dist/qmetry/client/tools/requirement-tools.js +1 -1
- package/dist/qmetry/client/tools/testcase-tools.js +311 -39
- package/dist/qmetry/client/tools/testsuite-tools.js +337 -23
- package/dist/qmetry/config/constants.js +6 -0
- package/dist/qmetry/config/rest-endpoints.js +8 -0
- package/dist/qmetry/types/automation.js +8 -0
- package/dist/qmetry/types/common.js +299 -4
- package/dist/qmetry/types/issues.js +5 -0
- package/dist/qmetry/types/project.js +13 -0
- package/dist/qmetry/types/requirements.js +5 -0
- package/dist/qmetry/types/testcase.js +5 -0
- package/dist/qmetry/types/testsuite.js +9 -0
- package/dist/swagger/client/api.js +93 -36
- package/dist/swagger/client/configuration.js +3 -1
- package/dist/swagger/client/portal-types.js +7 -6
- package/dist/swagger/client/registry-types.js +26 -0
- package/dist/swagger/client/tools.js +15 -16
- package/dist/swagger/client.js +6 -6
- package/dist/tests/unit/bugsnag/utils/factories.js +86 -0
- package/dist/zephyr/client.js +4 -0
- package/dist/zephyr/tool/environment/get-environments.js +68 -0
- package/dist/zephyr/tool/test-execution/get-test-executions.js +45 -0
- package/package.json +3 -2
|
@@ -75,3 +75,29 @@ export const ScanStandardizationParamsSchema = z.object({
|
|
|
75
75
|
.string()
|
|
76
76
|
.describe("API definition content (OpenAPI/AsyncAPI specification in JSON or YAML format) to scan for standardization errors"),
|
|
77
77
|
});
|
|
78
|
+
export const CreateApiFromPromptParamsSchema = z.object({
|
|
79
|
+
owner: z
|
|
80
|
+
.string()
|
|
81
|
+
.describe("API owner (organization or user, case-sensitive)"),
|
|
82
|
+
apiName: z.string().describe("API name"),
|
|
83
|
+
prompt: z
|
|
84
|
+
.string()
|
|
85
|
+
.describe("The prompt describing the desired API functionality (e.g., 'Create a RESTful API for managing a pet store with endpoints for pets, orders, and inventory')"),
|
|
86
|
+
specType: z
|
|
87
|
+
.enum([
|
|
88
|
+
"openapi20",
|
|
89
|
+
"openapi30x",
|
|
90
|
+
"openapi31x",
|
|
91
|
+
"asyncapi2xx",
|
|
92
|
+
"asyncapi30x",
|
|
93
|
+
])
|
|
94
|
+
.default("openapi30x")
|
|
95
|
+
.describe("Specification type for the generated API definition. Use: 'openapi20' for OpenAPI 2.0, 'openapi30x' for OpenAPI 3.0.x (default), 'openapi31x' for OpenAPI 3.1.x, 'asyncapi2xx' for AsyncAPI 2.x, 'asyncapi30x' for AsyncAPI 3.0.x"),
|
|
96
|
+
});
|
|
97
|
+
export const StandardizeApiParamsSchema = z.object({
|
|
98
|
+
owner: z
|
|
99
|
+
.string()
|
|
100
|
+
.describe("API owner (organization or user, case-sensitive)"),
|
|
101
|
+
api: z.string().describe("API name (case-sensitive)"),
|
|
102
|
+
version: z.string().describe("Version identifier"),
|
|
103
|
+
});
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
* Each tool includes parameters, descriptions, and handler method names.
|
|
6
6
|
* This follows the pattern established in the pactflow module.
|
|
7
7
|
*/
|
|
8
|
-
import { CreatePortalArgsSchema, CreateProductArgsSchema, CreateTableOfContentsArgsSchema,
|
|
9
|
-
import { ApiDefinitionParamsSchema, ApiSearchParamsSchema, CreateApiFromTemplateParamsSchema, CreateApiParamsSchema, ScanStandardizationParamsSchema, } from "./registry-types.js";
|
|
8
|
+
import { CreatePortalArgsSchema, CreateProductArgsSchema, CreateTableOfContentsArgsSchema, DeleteTableOfContentsArgsSchema, GetDocumentArgsSchema, GetProductSectionsArgsSchema, GetTableOfContentsArgsSchema, PortalArgsSchema, ProductArgsSchema, PublishProductArgsSchema, UpdateDocumentArgsSchema, UpdatePortalArgsSchema, UpdateProductArgsSchema, } from "./portal-types.js";
|
|
9
|
+
import { ApiDefinitionParamsSchema, ApiSearchParamsSchema, CreateApiFromPromptParamsSchema, CreateApiFromTemplateParamsSchema, CreateApiParamsSchema, ScanStandardizationParamsSchema, StandardizeApiParamsSchema, } from "./registry-types.js";
|
|
10
10
|
import { OrganizationsQuerySchema } from "./user-management-types.js";
|
|
11
11
|
export const TOOLS = [
|
|
12
12
|
{
|
|
@@ -27,13 +27,6 @@ export const TOOLS = [
|
|
|
27
27
|
inputSchema: PortalArgsSchema,
|
|
28
28
|
handler: "getPortal",
|
|
29
29
|
},
|
|
30
|
-
{
|
|
31
|
-
title: "Delete Portal",
|
|
32
|
-
summary: "Delete a specific portal.",
|
|
33
|
-
inputSchema: PortalArgsSchema,
|
|
34
|
-
handler: "deletePortal",
|
|
35
|
-
formatResponse: () => "Portal deleted successfully.",
|
|
36
|
-
},
|
|
37
30
|
{
|
|
38
31
|
title: "Update Portal",
|
|
39
32
|
summary: "Update a specific portal's configuration.",
|
|
@@ -114,12 +107,6 @@ export const TOOLS = [
|
|
|
114
107
|
inputSchema: UpdateDocumentArgsSchema,
|
|
115
108
|
handler: "updateDocument",
|
|
116
109
|
},
|
|
117
|
-
{
|
|
118
|
-
title: "Delete Document",
|
|
119
|
-
summary: "Delete a document by its ID. This will permanently remove the document content.",
|
|
120
|
-
inputSchema: DeleteDocumentArgsSchema,
|
|
121
|
-
handler: "deleteDocument",
|
|
122
|
-
},
|
|
123
110
|
// Registry API tools for SwaggerHub Design functionality
|
|
124
111
|
{
|
|
125
112
|
title: "Search APIs and Domains",
|
|
@@ -154,8 +141,20 @@ export const TOOLS = [
|
|
|
154
141
|
},
|
|
155
142
|
{
|
|
156
143
|
title: "Scan API Standardization",
|
|
157
|
-
summary: "Run a standardization scan against an API definition using the organization's standardization
|
|
144
|
+
summary: "Run a standardization scan against an API definition using the organization's governance and standardization rules. Accepts a YAML or JSON OpenAPI/AsyncAPI definition and returns a list of standardization errors and validation issues. Use this tool when users ask to validate, scan, or check API governance or standardization.",
|
|
158
145
|
inputSchema: ScanStandardizationParamsSchema,
|
|
159
146
|
handler: "scanStandardization",
|
|
160
147
|
},
|
|
148
|
+
{
|
|
149
|
+
title: "Create API from Prompt using SmartBear AI",
|
|
150
|
+
summary: "Generate and save an API definition based on a prompt using SmartBear AI. This tool automatically applies organization governance and standardization rules during API generation. The specType parameter determines the format of the generated definition. Use: 'openapi20' for OpenAPI 2.0, 'openapi30x' for OpenAPI 3.0.x, 'openapi31x' for OpenAPI 3.1.x, 'asyncapi2xx' for AsyncAPI 2.x, 'asyncapi30x' for AsyncAPI 3.0.x. Use this tool when creating APIs that comply with governance policies or when generating APIs from natural language descriptions. Use this tool when users ask to create, generate, or design APIs with governance or standardization requirements. Returns HTTP 201 for creation, HTTP 200 for update. Response includes 'operation' field indicating whether it was a 'create' or 'update' operation along with API details and SwaggerHub URL.",
|
|
151
|
+
inputSchema: CreateApiFromPromptParamsSchema,
|
|
152
|
+
handler: "createApiFromPrompt",
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
title: "Standardize API",
|
|
156
|
+
summary: "Standardize and fix an API definition using AI to ensure compliance with governance policies. Scans the API definition for standardization errors and automatically fixes them using SmartBear AI. If errors are found, they will be sent to SmartBear AI to generate a corrected definition, which is then saved back to the registry. Returns the number of errors found and the fixed definition if successful. Use this tool when users ask to standardize, fix, govern, or ensure governance compliance of APIs.",
|
|
157
|
+
inputSchema: StandardizeApiParamsSchema,
|
|
158
|
+
handler: "standardizeApi",
|
|
159
|
+
},
|
|
161
160
|
];
|
package/dist/swagger/client.js
CHANGED
|
@@ -32,9 +32,6 @@ export class SwaggerClient {
|
|
|
32
32
|
async getPortal(args) {
|
|
33
33
|
return this.getApi().getPortal(args.portalId);
|
|
34
34
|
}
|
|
35
|
-
async deletePortal(args) {
|
|
36
|
-
return this.getApi().deletePortal(args.portalId);
|
|
37
|
-
}
|
|
38
35
|
async updatePortal(args) {
|
|
39
36
|
const { portalId, ...body } = args;
|
|
40
37
|
return this.getApi().updatePortal(portalId, body);
|
|
@@ -77,9 +74,6 @@ export class SwaggerClient {
|
|
|
77
74
|
async updateDocument(args) {
|
|
78
75
|
return this.getApi().updateDocument(args);
|
|
79
76
|
}
|
|
80
|
-
async deleteDocument(args) {
|
|
81
|
-
return this.getApi().deleteDocument(args);
|
|
82
|
-
}
|
|
83
77
|
async deleteTableOfContents(args) {
|
|
84
78
|
return this.getApi().deleteTableOfContents(args);
|
|
85
79
|
}
|
|
@@ -100,9 +94,15 @@ export class SwaggerClient {
|
|
|
100
94
|
async getOrganizations(args) {
|
|
101
95
|
return this.getApi().getOrganizations(args);
|
|
102
96
|
}
|
|
97
|
+
async createApiFromPrompt(args) {
|
|
98
|
+
return this.getApi().createApiFromPrompt(args);
|
|
99
|
+
}
|
|
103
100
|
async scanStandardization(args) {
|
|
104
101
|
return this.getApi().scanStandardization(args);
|
|
105
102
|
}
|
|
103
|
+
async standardizeApi(args) {
|
|
104
|
+
return this.getApi().standardizeApi(args);
|
|
105
|
+
}
|
|
106
106
|
registerTools(register, _getInput) {
|
|
107
107
|
TOOLS.forEach((tool) => {
|
|
108
108
|
const { handler, formatResponse, ...toolParams } = tool;
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
export function getMockOrganization(id, name, slug, extra = {}) {
|
|
2
|
+
return {
|
|
3
|
+
id,
|
|
4
|
+
name,
|
|
5
|
+
slug: slug ?? name.toLowerCase().replace(/\s+/g, "-"),
|
|
6
|
+
updatedAt: new Date(),
|
|
7
|
+
createdAt: new Date(),
|
|
8
|
+
autoUpgrade: false,
|
|
9
|
+
managedByPlatformServices: false,
|
|
10
|
+
...extra,
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
export function getMockProject(id, name, apiKey, extra = {}) {
|
|
14
|
+
return { id, name, apiKey, ...extra };
|
|
15
|
+
}
|
|
16
|
+
export function getMockEventField(displayId, extra = {}) {
|
|
17
|
+
return {
|
|
18
|
+
displayId: displayId,
|
|
19
|
+
custom: false,
|
|
20
|
+
filterOptions: { name: "filter" },
|
|
21
|
+
pivotOptions: {},
|
|
22
|
+
...extra,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
export function getMockError(id, extra = {}) {
|
|
26
|
+
return { id, ...extra };
|
|
27
|
+
}
|
|
28
|
+
export function getMockEvent(id, extra = {}) {
|
|
29
|
+
return { id, ...extra };
|
|
30
|
+
}
|
|
31
|
+
export function getMockReleaseGroup(id, extra = {}) {
|
|
32
|
+
return {
|
|
33
|
+
id,
|
|
34
|
+
projectId: "proj-1",
|
|
35
|
+
releaseStageName: "production",
|
|
36
|
+
appVersion: "1.0.0",
|
|
37
|
+
firstReleasedAt: new Date().toISOString(),
|
|
38
|
+
firstReleaseId: "release-1",
|
|
39
|
+
releasesCount: 1,
|
|
40
|
+
hasSecondaryVersions: false,
|
|
41
|
+
totalSessionsCount: 0,
|
|
42
|
+
topReleaseGroup: false,
|
|
43
|
+
visible: true,
|
|
44
|
+
...extra,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
export function getMockRelease(id, extra = {}) {
|
|
48
|
+
return { id, ...extra };
|
|
49
|
+
}
|
|
50
|
+
export function getMockSpanGroup(id, name, category, extra = {}) {
|
|
51
|
+
return {
|
|
52
|
+
id: `span-group-${id}`,
|
|
53
|
+
name: `span-name-${name}`,
|
|
54
|
+
displayName: name,
|
|
55
|
+
category: category,
|
|
56
|
+
...extra,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
export function getMockSpan(traceId, id, name, category, isFirstClass = true, extra = {}) {
|
|
60
|
+
return {
|
|
61
|
+
traceId,
|
|
62
|
+
id: `span-${id}`,
|
|
63
|
+
name: `span-name-${name}`,
|
|
64
|
+
displayName: name,
|
|
65
|
+
category: category,
|
|
66
|
+
isFirstClass: isFirstClass,
|
|
67
|
+
duration: Math.round(Math.random() * 1000),
|
|
68
|
+
timestamp: new Date(Date.now()).toISOString(),
|
|
69
|
+
startTime: new Date(Date.now() - 1000).toISOString(),
|
|
70
|
+
timeAdjustmentType: "unadjusted",
|
|
71
|
+
...extra,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
export function getMockTrace(name, type) {
|
|
75
|
+
return {
|
|
76
|
+
displayId: name,
|
|
77
|
+
fieldType: type,
|
|
78
|
+
filterOptions: {
|
|
79
|
+
name: name,
|
|
80
|
+
description: "Cached field",
|
|
81
|
+
searchable: true,
|
|
82
|
+
matchTypes: ["eq"],
|
|
83
|
+
},
|
|
84
|
+
custom: true,
|
|
85
|
+
};
|
|
86
|
+
}
|
package/dist/zephyr/client.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import z from "zod";
|
|
2
2
|
import { ApiClient } from "./common/api-client.js";
|
|
3
|
+
import { GetEnvironments } from "./tool/environment/get-environments.js";
|
|
3
4
|
import { GetPriorities } from "./tool/priority/get-priorities.js";
|
|
4
5
|
import { GetProject } from "./tool/project/get-project.js";
|
|
5
6
|
import { GetProjects } from "./tool/project/get-projects.js";
|
|
@@ -9,6 +10,7 @@ import { GetTestCases } from "./tool/test-case/get-test-cases.js";
|
|
|
9
10
|
import { GetTestCycle } from "./tool/test-cycle/get-test-cycle.js";
|
|
10
11
|
import { GetTestCycles } from "./tool/test-cycle/get-test-cycles.js";
|
|
11
12
|
import { GetTestExecution } from "./tool/test-execution/get-test-execution.js";
|
|
13
|
+
import { GetTestExecutions } from "./tool/test-execution/get-test-executions.js";
|
|
12
14
|
const BASE_URL_DEFAULT = "https://api.zephyrscale.smartbear.com/v2";
|
|
13
15
|
const ConfigurationSchema = z.object({
|
|
14
16
|
api_token: z.string().describe("Zephyr Scale API token for authentication"),
|
|
@@ -44,8 +46,10 @@ export class ZephyrClient {
|
|
|
44
46
|
new GetPriorities(apiClient),
|
|
45
47
|
new GetStatuses(apiClient),
|
|
46
48
|
new GetTestCases(apiClient),
|
|
49
|
+
new GetEnvironments(apiClient),
|
|
47
50
|
new GetTestCase(apiClient),
|
|
48
51
|
new GetTestExecution(apiClient),
|
|
52
|
+
new GetTestExecutions(apiClient),
|
|
49
53
|
];
|
|
50
54
|
for (const tool of tools) {
|
|
51
55
|
register(tool.specification, tool.handle);
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { listEnvironmentsQueryParams, listEnvironmentsResponse, } from "../../common/rest-api-schemas.js";
|
|
2
|
+
export class GetEnvironments {
|
|
3
|
+
apiClient;
|
|
4
|
+
constructor(apiClient) {
|
|
5
|
+
this.apiClient = apiClient;
|
|
6
|
+
}
|
|
7
|
+
specification = {
|
|
8
|
+
title: "Get Environments",
|
|
9
|
+
summary: "Get environments in Zephyr",
|
|
10
|
+
readOnly: true,
|
|
11
|
+
idempotent: true,
|
|
12
|
+
inputSchema: listEnvironmentsQueryParams,
|
|
13
|
+
outputSchema: listEnvironmentsResponse,
|
|
14
|
+
examples: [
|
|
15
|
+
{
|
|
16
|
+
description: "Get the first 20 Environments",
|
|
17
|
+
parameters: {
|
|
18
|
+
maxResults: 20,
|
|
19
|
+
startAt: 0,
|
|
20
|
+
},
|
|
21
|
+
expectedOutput: "The first 20 Environments with their details from different projects",
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
description: "Get the first 10 Environments from the project with projectKey TEST",
|
|
25
|
+
parameters: {
|
|
26
|
+
projectKey: "TEST",
|
|
27
|
+
maxResults: 10,
|
|
28
|
+
startAt: 0,
|
|
29
|
+
},
|
|
30
|
+
expectedOutput: "The first 10 Environments with their details from project with projectKey TEST",
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
description: "Get second 10 Environments from the project with projectKey TEST",
|
|
34
|
+
parameters: {
|
|
35
|
+
projectKey: "TEST",
|
|
36
|
+
maxResults: 10,
|
|
37
|
+
startAt: 10,
|
|
38
|
+
},
|
|
39
|
+
expectedOutput: "The second 10 Environments with their details from project with projectKey TEST",
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
description: "Get Environments starting from the 5th Environment from different projects",
|
|
43
|
+
parameters: {
|
|
44
|
+
startAt: 5,
|
|
45
|
+
maxResults: 10,
|
|
46
|
+
},
|
|
47
|
+
expectedOutput: "Environments starting from the 5th one with their details from different projects",
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
description: "Get 5 Environments starting from the 10th Environment from the project with projectKey PROJ",
|
|
51
|
+
parameters: {
|
|
52
|
+
startAt: 10,
|
|
53
|
+
maxResults: 5,
|
|
54
|
+
projectKey: "PROJ",
|
|
55
|
+
},
|
|
56
|
+
expectedOutput: "The five environments starting from the 10th Environment from the project PROJ with their details",
|
|
57
|
+
},
|
|
58
|
+
],
|
|
59
|
+
};
|
|
60
|
+
handle = async (args) => {
|
|
61
|
+
const getEnvironmentsInput = listEnvironmentsQueryParams.parse(args);
|
|
62
|
+
const response = await this.apiClient.get("/environments", getEnvironmentsInput);
|
|
63
|
+
return {
|
|
64
|
+
structuredContent: response,
|
|
65
|
+
content: [],
|
|
66
|
+
};
|
|
67
|
+
};
|
|
68
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { listTestExecutionsNextgenQueryParams, listTestExecutionsNextgenResponse, } from "../../common/rest-api-schemas.js";
|
|
2
|
+
export class GetTestExecutions {
|
|
3
|
+
apiClient;
|
|
4
|
+
constructor(apiClient) {
|
|
5
|
+
this.apiClient = apiClient;
|
|
6
|
+
}
|
|
7
|
+
specification = {
|
|
8
|
+
title: "Get Test Executions",
|
|
9
|
+
summary: "Get test executions with optional filters",
|
|
10
|
+
readOnly: true,
|
|
11
|
+
idempotent: true,
|
|
12
|
+
inputSchema: listTestExecutionsNextgenQueryParams,
|
|
13
|
+
outputSchema: listTestExecutionsNextgenResponse,
|
|
14
|
+
examples: [
|
|
15
|
+
{
|
|
16
|
+
description: "Get the first 10 test executions",
|
|
17
|
+
parameters: { limit: 10, startAtId: 0 },
|
|
18
|
+
expectedOutput: "The first 10 test executions with their details",
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
description: "Get 5 test executions for the project PROJ",
|
|
22
|
+
parameters: { projectKey: "PROJ", limit: 5 },
|
|
23
|
+
expectedOutput: "Up to 5 test executions for project PROJ",
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
description: "Get some test executions that finished after 01/Jan/2024",
|
|
27
|
+
parameters: { actualEndDateAfter: "2024-01-01T00:00:00Z" },
|
|
28
|
+
expectedOutput: "Test executions that ended after 2024-01-01",
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
description: "Get test executions with step links included",
|
|
32
|
+
parameters: { includeStepLinks: true },
|
|
33
|
+
expectedOutput: "Test executions with step links included",
|
|
34
|
+
},
|
|
35
|
+
],
|
|
36
|
+
};
|
|
37
|
+
handle = async (args) => {
|
|
38
|
+
const parsedArgs = listTestExecutionsNextgenQueryParams.parse(args);
|
|
39
|
+
const response = await this.apiClient.get("/testexecutions/nextgen", parsedArgs);
|
|
40
|
+
return {
|
|
41
|
+
structuredContent: response,
|
|
42
|
+
content: [],
|
|
43
|
+
};
|
|
44
|
+
};
|
|
45
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@smartbear/mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.12.0",
|
|
4
4
|
"description": "MCP server for interacting SmartBear Products",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"smartbear",
|
|
@@ -43,7 +43,8 @@
|
|
|
43
43
|
"test:coverage": "vitest --coverage",
|
|
44
44
|
"test:coverage:ci": "vitest --coverage --reporter=verbose",
|
|
45
45
|
"test:run": "vitest run",
|
|
46
|
-
"coverage:check": "vitest --coverage --reporter=verbose --config vitest.config.coverage.ts"
|
|
46
|
+
"coverage:check": "vitest --coverage --reporter=verbose --config vitest.config.coverage.ts",
|
|
47
|
+
"bump": "node scripts/bump.js"
|
|
47
48
|
},
|
|
48
49
|
"dependencies": {
|
|
49
50
|
"@bugsnag/js": "^8.2.0",
|