diff --git a/src/main/resources/wfc/schemas/auth.yaml b/src/main/resources/wfc/schemas/auth.yaml index 9b0de6c..2bcb24c 100644 --- a/src/main/resources/wfc/schemas/auth.yaml +++ b/src/main/resources/wfc/schemas/auth.yaml @@ -4,7 +4,7 @@ title: "Web Fuzzing Commons Authentication" description: "Schema Definition for Web Fuzzing Commons Authentication" type: object properties: - schema_version: + schemaVersion: type: string description: "The schema version of WFC needed to use to validate and process this document." auth: diff --git a/src/main/resources/wfc/schemas/report.yaml b/src/main/resources/wfc/schemas/report.yaml index 750c62c..a277c47 100644 --- a/src/main/resources/wfc/schemas/report.yaml +++ b/src/main/resources/wfc/schemas/report.yaml @@ -5,45 +5,45 @@ description: "Schema Definition for Web Fuzzing Commons Reports" type: object properties: # REQUIRED - schema_version: + schemaVersion: type: string description: "The schema version of WFC needed to use to validate and process this document." - tool_name: + toolName: type: string description: "The name of the tool used to create the test cases reported in this document." - tool_version: + toolVersion: type: string description: "The version number of the used tool, e.g., 1.0.0." - creation_time: + creationTime: type: string format: date-time description: "The timestamp of when this report file was created." faults: $ref: "#/$defs/Faults" #### Unfortunately, there is no support for oneOf in jsonschema2pojo -# problem_details: +# problemDetails: # type: object # oneOf: # - $ref: "#/$defs/RESTReport" # # TODO GraphQL, RPC and Web - problem_details: + problemDetails: type: object properties: rest: $ref: "#/$defs/RESTReport" # TODO GraphQL, RPC and Web # expressing that only 1 should be present is possible, but super-verbose and convoluted - total_tests: + totalTests: type: integer minimum: 0 description: "The total number of test cases generated by the tool." - test_file_paths: + testFilePaths: type: array items: $ref: "#/$defs/TestFilePath" uniqueItems: true description: "The list of relative paths (compared to this document) of all the generated test suite files." - test_cases: + testCases: description: "Information on each generated test case." type: array items: @@ -55,7 +55,7 @@ properties: items: $ref: "#/$defs/Coverage" -required: ["schema_version","tool_name","tool_version","creation_time","faults","problem_details","total_tests","test_file_paths","test_cases"] +required: ["schemaVersion","toolName","toolVersion","creationTime","faults","problemDetails","totalTests","testFilePaths","testCases"] $defs: OperationId: @@ -84,11 +84,11 @@ $defs: description: "Data-structure to represent which HTTP status code where covered on an endpoint by any of the generated tests." type: object properties: - endpoint_id: + endpointId: $ref: "#/$defs/OperationId" - test_case_id: + testCaseId: $ref: "#/$defs/TestCaseId" - http_status: + httpStatus: description: "As in a test case the same endpoint could be called more than once, here we report all of the obtained HTTP status codes" type: array @@ -96,7 +96,7 @@ $defs: $ref: "#/$defs/HttpStatus" minItems: 1 uniqueItems: true - required: ["endpoint_id","test_case_id","http_status"] + required: ["endpointId","testCaseId","httpStatus"] HttpStatus: type: integer minimum: 0 @@ -106,54 +106,54 @@ $defs: in GraphQL and RPC) and which tests find faults in them." type: object properties: - operation_id: + operationId: $ref: "#/$defs/OperationId" - test_case_id: + testCaseId: $ref: "#/$defs/TestCaseId" - fault_categories: + faultCategories: type: array items: $ref: "#/$defs/FaultCategoryId" minItems: 1 uniqueItems: true - required: ["endpoint_id","test_case_id","fault_categories"] + required: ["endpointId","testCaseId","faultCategories"] RESTReport: type: object properties: - total_http_calls: + totalHttpCalls: description: "Total number of HTTP calls made in all the test cases. A test case could contain several HTTP calls, \ e.g., a POST followed by a GET and then a DELETE." type: integer minimum: 0 - endpoint_ids: + endpointIds: description: "Unique ids of all the endpoints in the tested API." type: array items: $ref: "#/$defs/OperationId" uniqueItems: true - covered_http_status: + coveredHttpStatus: description: "List of which HTTP status codes were covered, based on endpoints." type: array items: $ref: "#/$defs/CoveredEndpoint" - required: ["total_http_calls","endpoint_ids","covered_http_status"] + required: ["totalHttpCalls","endpointIds","coveredHttpStatus"] TestCase: type: object properties: id: $ref: "#/$defs/TestCaseId" - file_path: + filePath: $ref: "#/$defs/TestFilePath" name: description: "The name of the test case, as it appears in the generated test file." type: string - start_line: + startLine: description: "The line number in the generated test suite file where the code of this test case starts." type: integer minimum: 0 - end_line: + endLine: description: "The line number in the generated test suite file where the code of this test case ends." type: integer minimum: 0 @@ -161,30 +161,30 @@ $defs: Faults: type: object properties: - total_number: + totalNumber: description: "The total number of potential faults identified in the generated test suites. \ Each fault is uniquely identified with its 'code' category and 'context'. \ Note that different tests can detect the same fault, and a test case can detect several different faults." type: integer minimum: 0 - found_faults: + foundFaults: description: "Information on all the identified potential faults." type: array items: $ref: "#/$defs/FoundFault" - required: ["total_number","found_faults"] + required: ["totalNumber","foundFaults"] Coverage: type: object properties: - tool_name: + toolName: description: "The name of the tool used to collect and compute the coverage criteria." type: string criteria: type: array items: $ref: "#/$defs/CoverageCriterion" - required: ["tool_name","criteria"] + required: ["toolName","criteria"] CoverageCriterion: type: object diff --git a/web-report/index.html b/web-report/index.html index 3884cfa..c594238 100644 --- a/web-report/index.html +++ b/web-report/index.html @@ -4,6 +4,7 @@ + WFC Reports diff --git a/web-report/package.json b/web-report/package.json index 9d9b3b6..e89aa98 100644 --- a/web-report/package.json +++ b/web-report/package.json @@ -5,12 +5,13 @@ "type": "module", "scripts": { "dev": "vite", - "generate": "json2ts ../src/main/resources/wfc/schemas/report.yaml src/types/GeneratedTypes.tsx", + "generate": "json2ts ../src/main/resources/wfc/schemas/report.yaml src/types/GeneratedTypes.tsx && ts-to-zod src/types/GeneratedTypes.tsx src/types/GeneratedTypesZod.ts", "build": "tsc -b && vite build", - "installAndBuild": "yarn install && yarn generate && vitest --no-watch && tsc -b && vite build", + "installAndBuild": "yarn install && yarn generate && vitest --no-watch && tsc -b && vite build && yarn copyRunFiles", + "copyRunFiles": "cpx webreport.bat ../target/classes/webreport && cpx webreport.command ../target/classes/webreport && cpx webreport.py ../target/classes/webreport && cpx src-e2e/static/robots.txt ../target/classes/webreport", "lint": "eslint .", "preview": "vite preview", - "debug": "vite build && cpx \"src-e2e/static/*\" ../target/classes/webreport && vite preview", + "debug": "vite build && cpx src-e2e/static/* ../target/classes/webreport && vite preview", "test": "vitest" }, "dependencies": { @@ -31,7 +32,8 @@ "recharts": "^2.15.1", "tailwind-merge": "^3.0.2", "tailwindcss": "^4.0.14", - "tailwindcss-animate": "^1.0.7" + "tailwindcss-animate": "^1.0.7", + "zod": "^3.25.67" }, "devDependencies": { "@eslint/js": "^9.21.0", @@ -51,6 +53,7 @@ "eslint-plugin-react-refresh": "^0.4.19", "globals": "^15.15.0", "happy-dom": "^17.4.7", + "ts-to-zod": "^3.15.0", "typescript": "^5.8.3", "typescript-eslint": "^8.24.1", "vite": "^6.2.0", diff --git a/web-report/src-e2e/App.test.tsx b/web-report/src-e2e/App.test.tsx index 28fec4d..2fca749 100644 --- a/web-report/src-e2e/App.test.tsx +++ b/web-report/src-e2e/App.test.tsx @@ -4,7 +4,7 @@ import {resolve} from "path"; import {readFileSync} from "fs"; import {vi} from "vitest"; import App from "../src/App"; -import {fetchFileContent, getFaultCounts} from "@/lib/utils"; +import {fetchFileContent, getFaultCounts} from "../src/lib/utils"; // Read the report.json file const reportJsonPath = resolve(__dirname, './static/report.json'); @@ -68,22 +68,22 @@ describe('App test', () => { render(); expect(screen.getByText(/Please wait, files are loading.../)).toBeInTheDocument(); await waitFor(() => { - expect(screen.getByTestId('header-creation-date')).toContainHTML(new Date(reportData.creation_time).toUTCString()); - expect(screen.getByTestId('header-tool-name-version')).toContainHTML(`${reportData.tool_name}`); - expect(screen.getByTestId('header-tool-name-version')).toContainHTML(`${reportData.tool_version}`); - expect(screen.getByTestId('header-schema-version')).toContainHTML(reportData.schema_version); + expect(screen.getByTestId('header-creation-date')).toContainHTML(new Date(reportData.creationTime).toUTCString()); + expect(screen.getByTestId('header-tool-name-version')).toContainHTML(`${reportData.toolName}`); + expect(screen.getByTestId('header-tool-name-version')).toContainHTML(`${reportData.toolVersion}`); + expect(screen.getByTestId('header-schema-version')).toContainHTML(reportData.schemaVersion); }); }); it('check rest report', async () => { render(); expect(screen.getByText(/Please wait, files are loading.../)).toBeInTheDocument(); - const total = reportData.problem_details.rest.endpoint_ids.length; - const total_http_calls = reportData.problem_details.rest.total_http_calls; + const total = reportData.problemDetails.rest.endpointIds.length; + const totalHttpCalls = reportData.problemDetails.rest.totalHttpCalls; await waitFor(() => { expect(screen.getByTestId('rest-report-endpoint')).toContainHTML(`${total}`); - expect(screen.getByTestId('rest-report-http-calls')).toContainHTML(`${total_http_calls}`); + expect(screen.getByTestId('rest-report-http-calls')).toContainHTML(`${totalHttpCalls}`); }); }); @@ -91,11 +91,11 @@ describe('App test', () => { it('check generated tests', async () => { render(); expect(screen.getByText(/Please wait, files are loading.../)).toBeInTheDocument(); - const total_tests = reportData.total_tests; - const total_test_files = reportData.test_file_paths.length; + const totalTests = reportData.totalTests; + const totalTestFiles = reportData.testFilePaths.length; await waitFor(() => { - expect(screen.getByTestId('generated-tests-total-tests')).toContainHTML(`${total_tests}`); - expect(screen.getByTestId('generated-tests-total-test-files')).toContainHTML(`${total_test_files}`); + expect(screen.getByTestId('generated-tests-total-tests')).toContainHTML(`${totalTests}`); + expect(screen.getByTestId('generated-tests-total-test-files')).toContainHTML(`${totalTestFiles}`); }); }); @@ -125,7 +125,7 @@ describe('App test', () => { await waitFor(() => { // check if the endpoints are displayed - reportData.problem_details.rest.endpoint_ids.forEach((endpoint: string) => { + reportData.problemDetails.rest.endpointIds.forEach((endpoint: string) => { // const testId = convertEndpointToTestId(endpoint); expect(screen.getByTestId(endpoint)).toBeInTheDocument(); }); @@ -135,11 +135,11 @@ describe('App test', () => { it('check faults component', async () => { render(); expect(screen.getByText(/Please wait, files are loading.../)).toBeInTheDocument(); - const total_faults = reportData.faults.total_number; - const faultCounts = getFaultCounts(reportData.faults.found_faults); + const totalFaults = reportData.faults.totalNumber; + const faultCounts = getFaultCounts(reportData.faults.foundFaults); await waitFor(() => { - expect(screen.getByTestId('faults-component-total-faults')).toContainHTML(`${total_faults}`); + expect(screen.getByTestId('faults-component-total-faults')).toContainHTML(`${totalFaults}`); expect(screen.getByTestId('faults-component-fault-counts')).toContainHTML(faultCounts.length.toString()); }); }); diff --git a/web-report/src-e2e/static/report.json b/web-report/src-e2e/static/report.json index a113bc7..93a9940 100644 --- a/web-report/src-e2e/static/report.json +++ b/web-report/src-e2e/static/report.json @@ -1,15 +1,15 @@ { - "schema_version": "0.0.1", - "tool_name": "EvoMaster", - "tool_version": "unknown", - "creation_time": "2025-04-09T19:31:54.258Z", + "schemaVersion": "0.0.1", + "toolName": "EvoMaster", + "toolVersion": "unknown", + "creationTime": "2025-04-09T19:31:54.258Z", "faults": { - "total_number": 529, - "found_faults": [ + "totalNumber": 529, + "foundFaults": [ { - "operation_id": "GET:/app/api/credentials/", - "test_case_id": "faults.java#test_0", - "fault_categories": [ + "operationId": "GET:/app/api/credentials/", + "testCaseId": "faults.java#test_0", + "faultCategories": [ { "code": 200, "context": "GET:/app/api/credentials/ -> [Path '/collection/14/role'] Instance type (null) does not match any allowed primitive type (allowed: [\"string\"])" @@ -21,9 +21,9 @@ ] }, { - "operation_id": "GET:/app/api/projects", - "test_case_id": "faults.java#test_1", - "fault_categories": [ + "operationId": "GET:/app/api/projects", + "testCaseId": "faults.java#test_1", + "faultCategories": [ { "code": 200, "context": "GET:/app/api/projects -> [Path '/collection/9/endDate'] Instance type (null) does not match any allowed primitive type (allowed: [\"string\"])" @@ -35,9 +35,9 @@ ] }, { - "operation_id": "GET:/app/api/projects", - "test_case_id": "faults.java#test_2", - "fault_categories": [ + "operationId": "GET:/app/api/projects", + "testCaseId": "faults.java#test_2", + "faultCategories": [ { "code": 200, "context": "GET:/app/api/projects -> [Path '/collection/9/endDate'] Instance type (null) does not match any allowed primitive type (allowed: [\"string\"])" @@ -49,9 +49,9 @@ ] }, { - "operation_id": "POST:/app/api/departments", - "test_case_id": "faults.java#test_3", - "fault_categories": [ + "operationId": "POST:/app/api/departments", + "testCaseId": "faults.java#test_3", + "faultCategories": [ { "code": 200, "context": "POST:/app/api/departments -> [Path '/location/postalCode'] Instance type (null) does not match any allowed primitive type (allowed: [\"string\"])" @@ -59,9 +59,9 @@ ] }, { - "operation_id": "POST:/app/api/credentials/save", - "test_case_id": "faults.java#test_4", - "fault_categories": [ + "operationId": "POST:/app/api/credentials/save", + "testCaseId": "faults.java#test_4", + "faultCategories": [ { "code": 200, "context": "POST:/app/api/credentials/save -> [Path '/password'] Instance type (null) does not match any allowed primitive type (allowed: [\"string\"])" @@ -77,9 +77,9 @@ ] }, { - "operation_id": "GET:/app/api/employees/data/manager-project-data/{employeeId}", - "test_case_id": "faults.java#test_5", - "fault_categories": [ + "operationId": "GET:/app/api/employees/data/manager-project-data/{employeeId}", + "testCaseId": "faults.java#test_5", + "faultCategories": [ { "code": 200, "context": "GET:/app/api/employees/data/manager-project-data/{employeeId} -> [Path '/collection/0/title'] Instance type (null) does not match any allowed primitive type (allowed: [\"string\"])" @@ -95,9 +95,9 @@ ] }, { - "operation_id": "POST:/app/api/credentials", - "test_case_id": "faults.java#test_6", - "fault_categories": [ + "operationId": "POST:/app/api/credentials", + "testCaseId": "faults.java#test_6", + "faultCategories": [ { "code": 200, "context": "POST:/app/api/credentials -> [Path '/role'] Instance type (null) does not match any allowed primitive type (allowed: [\"string\"])" @@ -109,9 +109,9 @@ ] }, { - "operation_id": "POST:/app/api/credentials", - "test_case_id": "faults.java#test_7", - "fault_categories": [ + "operationId": "POST:/app/api/credentials", + "testCaseId": "faults.java#test_7", + "faultCategories": [ { "code": 200, "context": "POST:/app/api/credentials -> [Path '/password'] Instance type (null) does not match any allowed primitive type (allowed: [\"string\"])" @@ -119,9 +119,9 @@ ] }, { - "operation_id": "PUT:/app/api/credentials/update", - "test_case_id": "faults.java#test_8", - "fault_categories": [ + "operationId": "PUT:/app/api/credentials/update", + "testCaseId": "faults.java#test_8", + "faultCategories": [ { "code": 200, "context": "PUT:/app/api/credentials/update -> [Path '/username'] Instance type (null) does not match any allowed primitive type (allowed: [\"string\"])" @@ -129,9 +129,9 @@ ] }, { - "operation_id": "POST:/app/api/departments", - "test_case_id": "faults.java#test_9", - "fault_categories": [ + "operationId": "POST:/app/api/departments", + "testCaseId": "faults.java#test_9", + "faultCategories": [ { "code": 200, "context": "POST:/app/api/departments -> [Path '/location/adr'] Instance type (null) does not match any allowed primitive type (allowed: [\"string\"])" @@ -139,9 +139,9 @@ ] }, { - "operation_id": "POST:/app/api/projects", - "test_case_id": "faults.java#test_10", - "fault_categories": [ + "operationId": "POST:/app/api/projects", + "testCaseId": "faults.java#test_10", + "faultCategories": [ { "code": 200, "context": "POST:/app/api/projects -> [Path '/startDate'] Instance type (null) does not match any allowed primitive type (allowed: [\"string\"])" @@ -149,9 +149,9 @@ ] }, { - "operation_id": "POST:/app/api/credentials", - "test_case_id": "faults.java#test_11", - "fault_categories": [ + "operationId": "POST:/app/api/credentials", + "testCaseId": "faults.java#test_11", + "faultCategories": [ { "code": 200, "context": "POST:/app/api/credentials -> Response status 400 not defined for path '/api/credentials'." @@ -159,9 +159,9 @@ ] }, { - "operation_id": "GET:/app/api/credentials", - "test_case_id": "faults.java#test_11", - "fault_categories": [ + "operationId": "GET:/app/api/credentials", + "testCaseId": "faults.java#test_11", + "faultCategories": [ { "code": 200, "context": "GET:/app/api/credentials -> [Path '/collection/14/password'] Instance type (null) does not match any allowed primitive type (allowed: [\"string\"])" @@ -189,9 +189,9 @@ ] }, { - "operation_id": "GET:/app/api/employees", - "test_case_id": "faults.java#test_12", - "fault_categories": [ + "operationId": "GET:/app/api/employees", + "testCaseId": "faults.java#test_12", + "faultCategories": [ { "code": 200, "context": "GET:/app/api/employees -> [Path '/collection/0/manager/hiredate'] Instance type (null) does not match any allowed primitive type (allowed: [\"string\"])" @@ -327,9 +327,9 @@ ] }, { - "operation_id": "GET:/app/api/employees/", - "test_case_id": "faults.java#test_13", - "fault_categories": [ + "operationId": "GET:/app/api/employees/", + "testCaseId": "faults.java#test_13", + "faultCategories": [ { "code": 200, "context": "GET:/app/api/employees/ -> [Path '/collection/0/manager/hiredate'] Instance type (null) does not match any allowed primitive type (allowed: [\"string\"])" @@ -465,9 +465,9 @@ ] }, { - "operation_id": "PUT:/app/api/locations", - "test_case_id": "faults.java#test_14", - "fault_categories": [ + "operationId": "PUT:/app/api/locations", + "testCaseId": "faults.java#test_14", + "faultCategories": [ { "code": 200, "context": "PUT:/app/api/locations -> Response status 400 not defined for path '/api/locations'." @@ -475,9 +475,9 @@ ] }, { - "operation_id": "POST:/app/api/projects", - "test_case_id": "faults.java#test_15", - "fault_categories": [ + "operationId": "POST:/app/api/projects", + "testCaseId": "faults.java#test_15", + "faultCategories": [ { "code": 200, "context": "POST:/app/api/projects -> [Path '/endDate'] Instance type (null) does not match any allowed primitive type (allowed: [\"string\"])" @@ -489,9 +489,9 @@ ] }, { - "operation_id": "PUT:/app/api/projects", - "test_case_id": "faults.java#test_15", - "fault_categories": [ + "operationId": "PUT:/app/api/projects", + "testCaseId": "faults.java#test_15", + "faultCategories": [ { "code": 200, "context": "PUT:/app/api/projects -> Response status 400 not defined for path '/api/projects'." @@ -499,9 +499,9 @@ ] }, { - "operation_id": "GET:/app/api/assignments", - "test_case_id": "faults.java#test_16", - "fault_categories": [ + "operationId": "GET:/app/api/assignments", + "testCaseId": "faults.java#test_16", + "faultCategories": [ { "code": 200, "context": "GET:/app/api/assignments -> [Path '/collection/0/commitEmpDesc'] Instance type (null) does not match any allowed primitive type (allowed: [\"string\"])" @@ -1273,9 +1273,9 @@ ] }, { - "operation_id": "GET:/app/api/assignments/", - "test_case_id": "faults.java#test_17", - "fault_categories": [ + "operationId": "GET:/app/api/assignments/", + "testCaseId": "faults.java#test_17", + "faultCategories": [ { "code": 200, "context": "GET:/app/api/assignments/ -> [Path '/collection/0/commitEmpDesc'] Instance type (null) does not match any allowed primitive type (allowed: [\"string\"])" @@ -2047,9 +2047,9 @@ ] }, { - "operation_id": "GET:/app/api/assignments/{employeeId}/{projectId}", - "test_case_id": "faults.java#test_18", - "fault_categories": [ + "operationId": "GET:/app/api/assignments/{employeeId}/{projectId}", + "testCaseId": "faults.java#test_18", + "faultCategories": [ { "code": 200, "context": "GET:/app/api/assignments/{employeeId}/{projectId} -> Response status 400 not defined for path '/api/assignments/{employeeId}/{projectId}'." @@ -2057,9 +2057,9 @@ ] }, { - "operation_id": "POST:/app/api/projects", - "test_case_id": "faults.java#test_19", - "fault_categories": [ + "operationId": "POST:/app/api/projects", + "testCaseId": "faults.java#test_19", + "faultCategories": [ { "code": 200, "context": "POST:/app/api/projects -> Response status 400 not defined for path '/api/projects'." @@ -2067,9 +2067,9 @@ ] }, { - "operation_id": "POST:/app/api/projects/save", - "test_case_id": "faults.java#test_20", - "fault_categories": [ + "operationId": "POST:/app/api/projects/save", + "testCaseId": "faults.java#test_20", + "faultCategories": [ { "code": 200, "context": "POST:/app/api/projects/save -> Response status 400 not defined for path '/api/projects/save'." @@ -2077,9 +2077,9 @@ ] }, { - "operation_id": "DELETE:/app/api/assignments/delete/{employeeId}/{projectId}/{commitDate}", - "test_case_id": "faults.java#test_21", - "fault_categories": [ + "operationId": "DELETE:/app/api/assignments/delete/{employeeId}/{projectId}/{commitDate}", + "testCaseId": "faults.java#test_21", + "faultCategories": [ { "code": 200, "context": "DELETE:/app/api/assignments/delete/{employeeId}/{projectId}/{commitDate} -> Response status 400 not defined for path '/api/assignments/delete/{employeeId}/{projectId}/{commitDate}'." @@ -2087,9 +2087,9 @@ ] }, { - "operation_id": "GET:/app/api/employees/data/department/{departmentId}", - "test_case_id": "faults.java#test_22", - "fault_categories": [ + "operationId": "GET:/app/api/employees/data/department/{departmentId}", + "testCaseId": "faults.java#test_22", + "faultCategories": [ { "code": 200, "context": "GET:/app/api/employees/data/department/{departmentId} -> Response status 400 not defined for path '/api/employees/data/department/{departmentId}'." @@ -2097,9 +2097,9 @@ ] }, { - "operation_id": "DELETE:/app/api/departments/delete/{id}", - "test_case_id": "faults.java#test_23", - "fault_categories": [ + "operationId": "DELETE:/app/api/departments/delete/{id}", + "testCaseId": "faults.java#test_23", + "faultCategories": [ { "code": 200, "context": "DELETE:/app/api/departments/delete/{id} -> Response status 400 not defined for path '/api/departments/delete/{id}'." @@ -2107,9 +2107,9 @@ ] }, { - "operation_id": "DELETE:/app/api/employees/{id}", - "test_case_id": "faults.java#test_24", - "fault_categories": [ + "operationId": "DELETE:/app/api/employees/{id}", + "testCaseId": "faults.java#test_24", + "faultCategories": [ { "code": 200, "context": "DELETE:/app/api/employees/{id} -> Response status 400 not defined for path '/api/employees/{id}'." @@ -2117,9 +2117,9 @@ ] }, { - "operation_id": "DELETE:/app/api/locations/delete/{id}", - "test_case_id": "faults.java#test_25", - "fault_categories": [ + "operationId": "DELETE:/app/api/locations/delete/{id}", + "testCaseId": "faults.java#test_25", + "faultCategories": [ { "code": 200, "context": "DELETE:/app/api/locations/delete/{id} -> Response status 400 not defined for path '/api/locations/delete/{id}'." @@ -2127,9 +2127,9 @@ ] }, { - "operation_id": "DELETE:/app/api/projects/delete/{id}", - "test_case_id": "faults.java#test_26", - "fault_categories": [ + "operationId": "DELETE:/app/api/projects/delete/{id}", + "testCaseId": "faults.java#test_26", + "faultCategories": [ { "code": 200, "context": "DELETE:/app/api/projects/delete/{id} -> Response status 400 not defined for path '/api/projects/delete/{id}'." @@ -2137,9 +2137,9 @@ ] }, { - "operation_id": "GET:/app/api/departments/{id}", - "test_case_id": "faults.java#test_27", - "fault_categories": [ + "operationId": "GET:/app/api/departments/{id}", + "testCaseId": "faults.java#test_27", + "faultCategories": [ { "code": 200, "context": "GET:/app/api/departments/{id} -> Response status 400 not defined for path '/api/departments/{id}'." @@ -2147,9 +2147,9 @@ ] }, { - "operation_id": "PUT:/app/api/projects", - "test_case_id": "faults.java#test_28", - "fault_categories": [ + "operationId": "PUT:/app/api/projects", + "testCaseId": "faults.java#test_28", + "faultCategories": [ { "code": 200, "context": "PUT:/app/api/projects -> Response status 400 not defined for path '/api/projects'." @@ -2157,9 +2157,9 @@ ] }, { - "operation_id": "PUT:/app/api/projects", - "test_case_id": "faults.java#test_29", - "fault_categories": [ + "operationId": "PUT:/app/api/projects", + "testCaseId": "faults.java#test_29", + "faultCategories": [ { "code": 200, "context": "PUT:/app/api/projects -> Response status 400 not defined for path '/api/projects'." @@ -2167,9 +2167,9 @@ ] }, { - "operation_id": "GET:/app/api/assignments/data/project-commit/{employeeId}/{projectId}", - "test_case_id": "faults.java#test_30", - "fault_categories": [ + "operationId": "GET:/app/api/assignments/data/project-commit/{employeeId}/{projectId}", + "testCaseId": "faults.java#test_30", + "faultCategories": [ { "code": 200, "context": "GET:/app/api/assignments/data/project-commit/{employeeId}/{projectId} -> Response status 400 not defined for path '/api/assignments/data/project-commit/{employeeId}/{projectId}'." @@ -2177,9 +2177,9 @@ ] }, { - "operation_id": "GET:/app/api/assignments/{employeeId}/{projectId}/{commitDate}", - "test_case_id": "faults.java#test_31", - "fault_categories": [ + "operationId": "GET:/app/api/assignments/{employeeId}/{projectId}/{commitDate}", + "testCaseId": "faults.java#test_31", + "faultCategories": [ { "code": 200, "context": "GET:/app/api/assignments/{employeeId}/{projectId}/{commitDate} -> Response status 400 not defined for path '/api/assignments/{employeeId}/{projectId}/{commitDate}'." @@ -2187,9 +2187,9 @@ ] }, { - "operation_id": "GET:/app/api/employees/data/manager-project-data/{employeeId}", - "test_case_id": "faults.java#test_32", - "fault_categories": [ + "operationId": "GET:/app/api/employees/data/manager-project-data/{employeeId}", + "testCaseId": "faults.java#test_32", + "faultCategories": [ { "code": 200, "context": "GET:/app/api/employees/data/manager-project-data/{employeeId} -> Response status 400 not defined for path '/api/employees/data/manager-project-data/{employeeId}'." @@ -2197,9 +2197,9 @@ ] }, { - "operation_id": "DELETE:/app/api/credentials/delete/{id}", - "test_case_id": "faults.java#test_33", - "fault_categories": [ + "operationId": "DELETE:/app/api/credentials/delete/{id}", + "testCaseId": "faults.java#test_33", + "faultCategories": [ { "code": 200, "context": "DELETE:/app/api/credentials/delete/{id} -> Response status 400 not defined for path '/api/credentials/delete/{id}'." @@ -2207,9 +2207,9 @@ ] }, { - "operation_id": "GET:/app/api/credentials/{id}", - "test_case_id": "faults.java#test_34", - "fault_categories": [ + "operationId": "GET:/app/api/credentials/{id}", + "testCaseId": "faults.java#test_34", + "faultCategories": [ { "code": 200, "context": "GET:/app/api/credentials/{id} -> Response status 400 not defined for path '/api/credentials/{id}'." @@ -2217,9 +2217,9 @@ ] }, { - "operation_id": "GET:/app/api/employees/{id}", - "test_case_id": "faults.java#test_35", - "fault_categories": [ + "operationId": "GET:/app/api/employees/{id}", + "testCaseId": "faults.java#test_35", + "faultCategories": [ { "code": 200, "context": "GET:/app/api/employees/{id} -> Response status 400 not defined for path '/api/employees/{id}'." @@ -2227,9 +2227,9 @@ ] }, { - "operation_id": "GET:/app/api/projects/{id}", - "test_case_id": "faults.java#test_36", - "fault_categories": [ + "operationId": "GET:/app/api/projects/{id}", + "testCaseId": "faults.java#test_36", + "faultCategories": [ { "code": 200, "context": "GET:/app/api/projects/{id} -> Response status 400 not defined for path '/api/projects/{id}'." @@ -2237,9 +2237,9 @@ ] }, { - "operation_id": "DELETE:/app/api/projects/{id}", - "test_case_id": "faults.java#test_37", - "fault_categories": [ + "operationId": "DELETE:/app/api/projects/{id}", + "testCaseId": "faults.java#test_37", + "faultCategories": [ { "code": 200, "context": "DELETE:/app/api/projects/{id} -> Response status 400 not defined for path '/api/projects/{id}'." @@ -2247,9 +2247,9 @@ ] }, { - "operation_id": "DELETE:/app/api/credentials/username/{username}", - "test_case_id": "faults.java#test_38", - "fault_categories": [ + "operationId": "DELETE:/app/api/credentials/username/{username}", + "testCaseId": "faults.java#test_38", + "faultCategories": [ { "code": 200, "context": "DELETE:/app/api/credentials/username/{username} -> Response status 400 not defined for path '/api/credentials/username/{username}'." @@ -2257,9 +2257,9 @@ ] }, { - "operation_id": "GET:/app/api/employees/username/{username}", - "test_case_id": "faults.java#test_39", - "fault_categories": [ + "operationId": "GET:/app/api/employees/username/{username}", + "testCaseId": "faults.java#test_39", + "faultCategories": [ { "code": 200, "context": "GET:/app/api/employees/username/{username} -> Response status 400 not defined for path '/api/employees/username/{username}'." @@ -2267,9 +2267,9 @@ ] }, { - "operation_id": "GET:/app/api/credentials/username/{username}", - "test_case_id": "faults.java#test_40", - "fault_categories": [ + "operationId": "GET:/app/api/credentials/username/{username}", + "testCaseId": "faults.java#test_40", + "faultCategories": [ { "code": 200, "context": "GET:/app/api/credentials/username/{username} -> Response status 400 not defined for path '/api/credentials/username/{username}'." @@ -2277,9 +2277,9 @@ ] }, { - "operation_id": "PUT:/app/api/assignments", - "test_case_id": "faults.java#test_41", - "fault_categories": [ + "operationId": "PUT:/app/api/assignments", + "testCaseId": "faults.java#test_41", + "faultCategories": [ { "code": 200, "context": "PUT:/app/api/assignments -> Response status 400 not defined for path '/api/assignments'." @@ -2287,9 +2287,9 @@ ] }, { - "operation_id": "GET:/app/api/credentials/username/{username}", - "test_case_id": "faults.java#test_42", - "fault_categories": [ + "operationId": "GET:/app/api/credentials/username/{username}", + "testCaseId": "faults.java#test_42", + "faultCategories": [ { "code": 200, "context": "GET:/app/api/credentials/username/{username} -> Response status 400 not defined for path '/api/credentials/username/{username}'." @@ -2297,9 +2297,9 @@ ] }, { - "operation_id": "POST:/app/api/locations/save", - "test_case_id": "faults.java#test_43", - "fault_categories": [ + "operationId": "POST:/app/api/locations/save", + "testCaseId": "faults.java#test_43", + "faultCategories": [ { "code": 200, "context": "POST:/app/api/locations/save -> Response status 400 not defined for path '/api/locations/save'." @@ -2307,9 +2307,9 @@ ] }, { - "operation_id": "PUT:/app/api/locations/update", - "test_case_id": "faults.java#test_44", - "fault_categories": [ + "operationId": "PUT:/app/api/locations/update", + "testCaseId": "faults.java#test_44", + "faultCategories": [ { "code": 200, "context": "PUT:/app/api/locations/update -> Response status 400 not defined for path '/api/locations/update'." @@ -2317,9 +2317,9 @@ ] }, { - "operation_id": "PUT:/app/api/departments", - "test_case_id": "faults.java#test_45", - "fault_categories": [ + "operationId": "PUT:/app/api/departments", + "testCaseId": "faults.java#test_45", + "faultCategories": [ { "code": 200, "context": "PUT:/app/api/departments -> Response status 400 not defined for path '/api/departments'." @@ -2327,9 +2327,9 @@ ] }, { - "operation_id": "PUT:/app/api/departments", - "test_case_id": "faults.java#test_46", - "fault_categories": [ + "operationId": "PUT:/app/api/departments", + "testCaseId": "faults.java#test_46", + "faultCategories": [ { "code": 200, "context": "PUT:/app/api/departments -> Response status 400 not defined for path '/api/departments'." @@ -2337,9 +2337,9 @@ ] }, { - "operation_id": "POST:/app/api/authenticate", - "test_case_id": "faults.java#test_47", - "fault_categories": [ + "operationId": "POST:/app/api/authenticate", + "testCaseId": "faults.java#test_47", + "faultCategories": [ { "code": 200, "context": "POST:/app/api/authenticate -> Response status 400 not defined for path '/api/authenticate'." @@ -2347,9 +2347,9 @@ ] }, { - "operation_id": "PUT:/app/api/departments", - "test_case_id": "faults.java#test_48", - "fault_categories": [ + "operationId": "PUT:/app/api/departments", + "testCaseId": "faults.java#test_48", + "faultCategories": [ { "code": 200, "context": "PUT:/app/api/departments -> Response status 400 not defined for path '/api/departments'." @@ -2357,9 +2357,9 @@ ] }, { - "operation_id": "PUT:/app/api/employees", - "test_case_id": "faults.java#test_49", - "fault_categories": [ + "operationId": "PUT:/app/api/employees", + "testCaseId": "faults.java#test_49", + "faultCategories": [ { "code": 200, "context": "PUT:/app/api/employees -> Response status 400 not defined for path '/api/employees'." @@ -2367,9 +2367,9 @@ ] }, { - "operation_id": "PUT:/app/api/employees/update", - "test_case_id": "faults.java#test_50", - "fault_categories": [ + "operationId": "PUT:/app/api/employees/update", + "testCaseId": "faults.java#test_50", + "faultCategories": [ { "code": 200, "context": "PUT:/app/api/employees/update -> Response status 400 not defined for path '/api/employees/update'." @@ -2377,9 +2377,9 @@ ] }, { - "operation_id": "POST:/app/api/credentials", - "test_case_id": "faults.java#test_51", - "fault_categories": [ + "operationId": "POST:/app/api/credentials", + "testCaseId": "faults.java#test_51", + "faultCategories": [ { "code": 200, "context": "POST:/app/api/credentials -> Response status 400 not defined for path '/api/credentials'." @@ -2387,9 +2387,9 @@ ] }, { - "operation_id": "POST:/app/api/employees/save", - "test_case_id": "faults.java#test_52", - "fault_categories": [ + "operationId": "POST:/app/api/employees/save", + "testCaseId": "faults.java#test_52", + "faultCategories": [ { "code": 200, "context": "POST:/app/api/employees/save -> Response status 400 not defined for path '/api/employees/save'." @@ -2397,9 +2397,9 @@ ] }, { - "operation_id": "PUT:/app/api/assignments/update", - "test_case_id": "faults.java#test_53", - "fault_categories": [ + "operationId": "PUT:/app/api/assignments/update", + "testCaseId": "faults.java#test_53", + "faultCategories": [ { "code": 200, "context": "PUT:/app/api/assignments/update -> Response status 400 not defined for path '/api/assignments/update'." @@ -2407,9 +2407,9 @@ ] }, { - "operation_id": "POST:/app/api/assignments", - "test_case_id": "faults.java#test_54", - "fault_categories": [ + "operationId": "POST:/app/api/assignments", + "testCaseId": "faults.java#test_54", + "faultCategories": [ { "code": 200, "context": "POST:/app/api/assignments -> Response status 400 not defined for path '/api/assignments'." @@ -2417,9 +2417,9 @@ ] }, { - "operation_id": "GET:/app/api/assignments/data/project-commit/{projectId}", - "test_case_id": "faults.java#test_55", - "fault_categories": [ + "operationId": "GET:/app/api/assignments/data/project-commit/{projectId}", + "testCaseId": "faults.java#test_55", + "faultCategories": [ { "code": 200, "context": "GET:/app/api/assignments/data/project-commit/{projectId} -> Response status 400 not defined for path '/api/assignments/data/project-commit/{projectId}'." @@ -2427,9 +2427,9 @@ ] }, { - "operation_id": "DELETE:/app/api/projects/{id}", - "test_case_id": "faults.java#test_56", - "fault_categories": [ + "operationId": "DELETE:/app/api/projects/{id}", + "testCaseId": "faults.java#test_56", + "faultCategories": [ { "code": 200, "context": "DELETE:/app/api/projects/{id} -> Response status 400 not defined for path '/api/projects/{id}'." @@ -2437,9 +2437,9 @@ ] }, { - "operation_id": "GET:/app/api/locations/{id}", - "test_case_id": "faults.java#test_57", - "fault_categories": [ + "operationId": "GET:/app/api/locations/{id}", + "testCaseId": "faults.java#test_57", + "faultCategories": [ { "code": 200, "context": "GET:/app/api/locations/{id} -> Response status 400 not defined for path '/api/locations/{id}'." @@ -2447,9 +2447,9 @@ ] }, { - "operation_id": "PUT:/app/api/projects", - "test_case_id": "faults.java#test_58", - "fault_categories": [ + "operationId": "PUT:/app/api/projects", + "testCaseId": "faults.java#test_58", + "faultCategories": [ { "code": 200, "context": "PUT:/app/api/projects -> Response status 400 not defined for path '/api/projects'." @@ -2457,9 +2457,9 @@ ] }, { - "operation_id": "DELETE:/app/api/employees/username/{username}", - "test_case_id": "faults.java#test_59", - "fault_categories": [ + "operationId": "DELETE:/app/api/employees/username/{username}", + "testCaseId": "faults.java#test_59", + "faultCategories": [ { "code": 200, "context": "DELETE:/app/api/employees/username/{username} -> Response status 400 not defined for path '/api/employees/username/{username}'." @@ -2467,9 +2467,9 @@ ] }, { - "operation_id": "POST:/app/api/projects/save", - "test_case_id": "faults.java#test_60", - "fault_categories": [ + "operationId": "POST:/app/api/projects/save", + "testCaseId": "faults.java#test_60", + "faultCategories": [ { "code": 200, "context": "POST:/app/api/projects/save -> Response status 400 not defined for path '/api/projects/save'." @@ -2477,9 +2477,9 @@ ] }, { - "operation_id": "POST:/app/api/projects", - "test_case_id": "faults.java#test_61", - "fault_categories": [ + "operationId": "POST:/app/api/projects", + "testCaseId": "faults.java#test_61", + "faultCategories": [ { "code": 200, "context": "POST:/app/api/projects -> Response status 400 not defined for path '/api/projects'." @@ -2487,9 +2487,9 @@ ] }, { - "operation_id": "DELETE:/app/api/employees/username/{username}", - "test_case_id": "faults.java#test_62", - "fault_categories": [ + "operationId": "DELETE:/app/api/employees/username/{username}", + "testCaseId": "faults.java#test_62", + "faultCategories": [ { "code": 200, "context": "DELETE:/app/api/employees/username/{username} -> Response status 400 not defined for path '/api/employees/username/{username}'." @@ -2497,9 +2497,9 @@ ] }, { - "operation_id": "GET:/app/api/assignments/data/project-commit/{employeeId}/{projectId}/{commitDate}", - "test_case_id": "faults.java#test_63", - "fault_categories": [ + "operationId": "GET:/app/api/assignments/data/project-commit/{employeeId}/{projectId}/{commitDate}", + "testCaseId": "faults.java#test_63", + "faultCategories": [ { "code": 200, "context": "GET:/app/api/assignments/data/project-commit/{employeeId}/{projectId}/{commitDate} -> Response status 400 not defined for path '/api/assignments/data/project-commit/{employeeId}/{projectId}/{commitDate}'." @@ -2507,9 +2507,9 @@ ] }, { - "operation_id": "GET:/app/api/assignments/data/project-commit/{employeeId}/{projectId}", - "test_case_id": "faults.java#test_64", - "fault_categories": [ + "operationId": "GET:/app/api/assignments/data/project-commit/{employeeId}/{projectId}", + "testCaseId": "faults.java#test_64", + "faultCategories": [ { "code": 200, "context": "GET:/app/api/assignments/data/project-commit/{employeeId}/{projectId} -> Response status 400 not defined for path '/api/assignments/data/project-commit/{employeeId}/{projectId}'." @@ -2517,9 +2517,9 @@ ] }, { - "operation_id": "DELETE:/app/api/assignments/{employeeId}/{projectId}/{commitDate}", - "test_case_id": "faults.java#test_65", - "fault_categories": [ + "operationId": "DELETE:/app/api/assignments/{employeeId}/{projectId}/{commitDate}", + "testCaseId": "faults.java#test_65", + "faultCategories": [ { "code": 200, "context": "DELETE:/app/api/assignments/{employeeId}/{projectId}/{commitDate} -> Response status 400 not defined for path '/api/assignments/{employeeId}/{projectId}/{commitDate}'." @@ -2527,9 +2527,9 @@ ] }, { - "operation_id": "GET:/app/api/employees/data/employee-project-data/{employeeId}", - "test_case_id": "faults.java#test_66", - "fault_categories": [ + "operationId": "GET:/app/api/employees/data/employee-project-data/{employeeId}", + "testCaseId": "faults.java#test_66", + "faultCategories": [ { "code": 200, "context": "GET:/app/api/employees/data/employee-project-data/{employeeId} -> Response status 400 not defined for path '/api/employees/data/employee-project-data/{employeeId}'." @@ -2537,9 +2537,9 @@ ] }, { - "operation_id": "DELETE:/app/api/departments/{id}", - "test_case_id": "faults.java#test_67", - "fault_categories": [ + "operationId": "DELETE:/app/api/departments/{id}", + "testCaseId": "faults.java#test_67", + "faultCategories": [ { "code": 200, "context": "DELETE:/app/api/departments/{id} -> Response status 400 not defined for path '/api/departments/{id}'." @@ -2547,9 +2547,9 @@ ] }, { - "operation_id": "DELETE:/app/api/locations/{id}", - "test_case_id": "faults.java#test_68", - "fault_categories": [ + "operationId": "DELETE:/app/api/locations/{id}", + "testCaseId": "faults.java#test_68", + "faultCategories": [ { "code": 200, "context": "DELETE:/app/api/locations/{id} -> Response status 400 not defined for path '/api/locations/{id}'." @@ -2557,9 +2557,9 @@ ] }, { - "operation_id": "GET:/app/api/assignments/data/project-commit/{employeeId}/{projectId}/{commitDate}", - "test_case_id": "faults.java#test_69", - "fault_categories": [ + "operationId": "GET:/app/api/assignments/data/project-commit/{employeeId}/{projectId}/{commitDate}", + "testCaseId": "faults.java#test_69", + "faultCategories": [ { "code": 200, "context": "GET:/app/api/assignments/data/project-commit/{employeeId}/{projectId}/{commitDate} -> Response status 400 not defined for path '/api/assignments/data/project-commit/{employeeId}/{projectId}/{commitDate}'." @@ -2567,9 +2567,9 @@ ] }, { - "operation_id": "GET:/app/api/assignments/data/project-commit/{employeeId}/{projectId}", - "test_case_id": "faults.java#test_70", - "fault_categories": [ + "operationId": "GET:/app/api/assignments/data/project-commit/{employeeId}/{projectId}", + "testCaseId": "faults.java#test_70", + "faultCategories": [ { "code": 200, "context": "GET:/app/api/assignments/data/project-commit/{employeeId}/{projectId} -> Response status 400 not defined for path '/api/assignments/data/project-commit/{employeeId}/{projectId}'." @@ -2577,9 +2577,9 @@ ] }, { - "operation_id": "DELETE:/app/api/credentials/{id}", - "test_case_id": "faults.java#test_71", - "fault_categories": [ + "operationId": "DELETE:/app/api/credentials/{id}", + "testCaseId": "faults.java#test_71", + "faultCategories": [ { "code": 200, "context": "DELETE:/app/api/credentials/{id} -> Response status 400 not defined for path '/api/credentials/{id}'." @@ -2587,9 +2587,9 @@ ] }, { - "operation_id": "DELETE:/app/api/employees/delete/{id}", - "test_case_id": "faults.java#test_72", - "fault_categories": [ + "operationId": "DELETE:/app/api/employees/delete/{id}", + "testCaseId": "faults.java#test_72", + "faultCategories": [ { "code": 200, "context": "DELETE:/app/api/employees/delete/{id} -> Response status 400 not defined for path '/api/employees/delete/{id}'." @@ -2597,9 +2597,9 @@ ] }, { - "operation_id": "POST:/app/api/employees/save", - "test_case_id": "faults.java#test_73", - "fault_categories": [ + "operationId": "POST:/app/api/employees/save", + "testCaseId": "faults.java#test_73", + "faultCategories": [ { "code": 200, "context": "POST:/app/api/employees/save -> Response status 400 not defined for path '/api/employees/save'." @@ -2607,9 +2607,9 @@ ] }, { - "operation_id": "PUT:/app/api/projects/update", - "test_case_id": "faults.java#test_74", - "fault_categories": [ + "operationId": "PUT:/app/api/projects/update", + "testCaseId": "faults.java#test_74", + "faultCategories": [ { "code": 200, "context": "PUT:/app/api/projects/update -> Response status 400 not defined for path '/api/projects/update'." @@ -2617,9 +2617,9 @@ ] }, { - "operation_id": "POST:/app/api/locations", - "test_case_id": "faults.java#test_75", - "fault_categories": [ + "operationId": "POST:/app/api/locations", + "testCaseId": "faults.java#test_75", + "faultCategories": [ { "code": 200, "context": "POST:/app/api/locations -> Response status 400 not defined for path '/api/locations'." @@ -2627,9 +2627,9 @@ ] }, { - "operation_id": "POST:/app/api/assignments", - "test_case_id": "faults.java#test_76", - "fault_categories": [ + "operationId": "POST:/app/api/assignments", + "testCaseId": "faults.java#test_76", + "faultCategories": [ { "code": 200, "context": "POST:/app/api/assignments -> Response status 400 not defined for path '/api/assignments'." @@ -2637,9 +2637,9 @@ ] }, { - "operation_id": "PUT:/app/api/assignments/update", - "test_case_id": "faults.java#test_77", - "fault_categories": [ + "operationId": "PUT:/app/api/assignments/update", + "testCaseId": "faults.java#test_77", + "faultCategories": [ { "code": 200, "context": "PUT:/app/api/assignments/update -> Response status 400 not defined for path '/api/assignments/update'." @@ -2647,9 +2647,9 @@ ] }, { - "operation_id": "POST:/app/api/assignments/save", - "test_case_id": "faults.java#test_78", - "fault_categories": [ + "operationId": "POST:/app/api/assignments/save", + "testCaseId": "faults.java#test_78", + "faultCategories": [ { "code": 200, "context": "POST:/app/api/assignments/save -> Response status 400 not defined for path '/api/assignments/save'." @@ -2657,9 +2657,9 @@ ] }, { - "operation_id": "POST:/app/api/departments", - "test_case_id": "faults.java#test_79", - "fault_categories": [ + "operationId": "POST:/app/api/departments", + "testCaseId": "faults.java#test_79", + "faultCategories": [ { "code": 200, "context": "POST:/app/api/departments -> Response status 400 not defined for path '/api/departments'." @@ -2667,9 +2667,9 @@ ] }, { - "operation_id": "POST:/app/api/assignments", - "test_case_id": "faults.java#test_80", - "fault_categories": [ + "operationId": "POST:/app/api/assignments", + "testCaseId": "faults.java#test_80", + "faultCategories": [ { "code": 200, "context": "POST:/app/api/assignments -> Response status 400 not defined for path '/api/assignments'." @@ -2677,9 +2677,9 @@ ] }, { - "operation_id": "PUT:/app/api/credentials", - "test_case_id": "faults.java#test_81", - "fault_categories": [ + "operationId": "PUT:/app/api/credentials", + "testCaseId": "faults.java#test_81", + "faultCategories": [ { "code": 200, "context": "PUT:/app/api/credentials -> Response status 400 not defined for path '/api/credentials'." @@ -2687,9 +2687,9 @@ ] }, { - "operation_id": "PUT:/app/api/projects/update", - "test_case_id": "faults.java#test_82", - "fault_categories": [ + "operationId": "PUT:/app/api/projects/update", + "testCaseId": "faults.java#test_82", + "faultCategories": [ { "code": 200, "context": "PUT:/app/api/projects/update -> Response status 400 not defined for path '/api/projects/update'." @@ -2697,9 +2697,9 @@ ] }, { - "operation_id": "PUT:/app/api/projects", - "test_case_id": "faults.java#test_83", - "fault_categories": [ + "operationId": "PUT:/app/api/projects", + "testCaseId": "faults.java#test_83", + "faultCategories": [ { "code": 200, "context": "PUT:/app/api/projects -> Response status 400 not defined for path '/api/projects'." @@ -2707,9 +2707,9 @@ ] }, { - "operation_id": "POST:/app/api/departments/save", - "test_case_id": "faults.java#test_84", - "fault_categories": [ + "operationId": "POST:/app/api/departments/save", + "testCaseId": "faults.java#test_84", + "faultCategories": [ { "code": 200, "context": "POST:/app/api/departments/save -> Response status 400 not defined for path '/api/departments/save'." @@ -2717,9 +2717,9 @@ ] }, { - "operation_id": "PUT:/app/api/departments/update", - "test_case_id": "faults.java#test_85", - "fault_categories": [ + "operationId": "PUT:/app/api/departments/update", + "testCaseId": "faults.java#test_85", + "faultCategories": [ { "code": 200, "context": "PUT:/app/api/departments/update -> Response status 400 not defined for path '/api/departments/update'." @@ -2727,9 +2727,9 @@ ] }, { - "operation_id": "PUT:/app/api/departments/update", - "test_case_id": "faults.java#test_86", - "fault_categories": [ + "operationId": "PUT:/app/api/departments/update", + "testCaseId": "faults.java#test_86", + "faultCategories": [ { "code": 200, "context": "PUT:/app/api/departments/update -> Response status 400 not defined for path '/api/departments/update'." @@ -2737,9 +2737,9 @@ ] }, { - "operation_id": "POST:/app/api/credentials/save", - "test_case_id": "faults.java#test_87", - "fault_categories": [ + "operationId": "POST:/app/api/credentials/save", + "testCaseId": "faults.java#test_87", + "faultCategories": [ { "code": 200, "context": "POST:/app/api/credentials/save -> Response status 400 not defined for path '/api/credentials/save'." @@ -2747,9 +2747,9 @@ ] }, { - "operation_id": "PUT:/app/api/credentials/update", - "test_case_id": "faults.java#test_88", - "fault_categories": [ + "operationId": "PUT:/app/api/credentials/update", + "testCaseId": "faults.java#test_88", + "faultCategories": [ { "code": 200, "context": "PUT:/app/api/credentials/update -> Response status 400 not defined for path '/api/credentials/update'." @@ -2757,9 +2757,9 @@ ] }, { - "operation_id": "POST:/app/api/assignments", - "test_case_id": "faults.java#test_89", - "fault_categories": [ + "operationId": "POST:/app/api/assignments", + "testCaseId": "faults.java#test_89", + "faultCategories": [ { "code": 200, "context": "POST:/app/api/assignments -> Response status 400 not defined for path '/api/assignments'." @@ -2767,9 +2767,9 @@ ] }, { - "operation_id": "PUT:/app/api/departments/update", - "test_case_id": "faults.java#test_90", - "fault_categories": [ + "operationId": "PUT:/app/api/departments/update", + "testCaseId": "faults.java#test_90", + "faultCategories": [ { "code": 200, "context": "PUT:/app/api/departments/update -> Response status 400 not defined for path '/api/departments/update'." @@ -2777,9 +2777,9 @@ ] }, { - "operation_id": "DELETE:/app/api/credentials/{id}", - "test_case_id": "faults.java#test_91", - "fault_categories": [ + "operationId": "DELETE:/app/api/credentials/{id}", + "testCaseId": "faults.java#test_91", + "faultCategories": [ { "code": 200, "context": "DELETE:/app/api/credentials/{id} -> Response status 400 not defined for path '/api/credentials/{id}'." @@ -2787,9 +2787,9 @@ ] }, { - "operation_id": "POST:/app/api/employees", - "test_case_id": "faults.java#test_92", - "fault_categories": [ + "operationId": "POST:/app/api/employees", + "testCaseId": "faults.java#test_92", + "faultCategories": [ { "code": 200, "context": "POST:/app/api/employees -> Response status 400 not defined for path '/api/employees'." @@ -2797,9 +2797,9 @@ ] }, { - "operation_id": "POST:/app/api/locations", - "test_case_id": "faults.java#test_93", - "fault_categories": [ + "operationId": "POST:/app/api/locations", + "testCaseId": "faults.java#test_93", + "faultCategories": [ { "code": 200, "context": "POST:/app/api/locations -> Response status 400 not defined for path '/api/locations'." @@ -2807,9 +2807,9 @@ ] }, { - "operation_id": "POST:/app/api/authenticate/", - "test_case_id": "faults.java#test_94", - "fault_categories": [ + "operationId": "POST:/app/api/authenticate/", + "testCaseId": "faults.java#test_94", + "faultCategories": [ { "code": 200, "context": "POST:/app/api/authenticate/ -> Response status 400 not defined for path '/api/authenticate/'." @@ -2817,9 +2817,9 @@ ] }, { - "operation_id": "PUT:/app/api/projects", - "test_case_id": "faults.java#test_95", - "fault_categories": [ + "operationId": "PUT:/app/api/projects", + "testCaseId": "faults.java#test_95", + "faultCategories": [ { "code": 200, "context": "PUT:/app/api/projects -> Response status 400 not defined for path '/api/projects'." @@ -2827,9 +2827,9 @@ ] }, { - "operation_id": "PUT:/app/api/locations/update", - "test_case_id": "faults.java#test_96", - "fault_categories": [ + "operationId": "PUT:/app/api/locations/update", + "testCaseId": "faults.java#test_96", + "faultCategories": [ { "code": 200, "context": "PUT:/app/api/locations/update -> Response status 400 not defined for path '/api/locations/update'." @@ -2837,9 +2837,9 @@ ] }, { - "operation_id": "POST:/app/api/authenticate/", - "test_case_id": "faults.java#test_97", - "fault_categories": [ + "operationId": "POST:/app/api/authenticate/", + "testCaseId": "faults.java#test_97", + "faultCategories": [ { "code": 200, "context": "POST:/app/api/authenticate/ -> Response status 400 not defined for path '/api/authenticate/'." @@ -2847,9 +2847,9 @@ ] }, { - "operation_id": "POST:/app/api/assignments/save", - "test_case_id": "faults.java#test_98", - "fault_categories": [ + "operationId": "POST:/app/api/assignments/save", + "testCaseId": "faults.java#test_98", + "faultCategories": [ { "code": 200, "context": "POST:/app/api/assignments/save -> Response status 400 not defined for path '/api/assignments/save'." @@ -2857,9 +2857,9 @@ ] }, { - "operation_id": "PUT:/app/api/departments", - "test_case_id": "faults.java#test_99", - "fault_categories": [ + "operationId": "PUT:/app/api/departments", + "testCaseId": "faults.java#test_99", + "faultCategories": [ { "code": 200, "context": "PUT:/app/api/departments -> Response status 400 not defined for path '/api/departments'." @@ -2867,9 +2867,9 @@ ] }, { - "operation_id": "PUT:/app/api/assignments/update", - "test_case_id": "faults.java#test_100", - "fault_categories": [ + "operationId": "PUT:/app/api/assignments/update", + "testCaseId": "faults.java#test_100", + "faultCategories": [ { "code": 200, "context": "PUT:/app/api/assignments/update -> Response status 400 not defined for path '/api/assignments/update'." @@ -2877,9 +2877,9 @@ ] }, { - "operation_id": "POST:/app/api/assignments", - "test_case_id": "faults.java#test_101", - "fault_categories": [ + "operationId": "POST:/app/api/assignments", + "testCaseId": "faults.java#test_101", + "faultCategories": [ { "code": 200, "context": "POST:/app/api/assignments -> Response status 400 not defined for path '/api/assignments'." @@ -2887,9 +2887,9 @@ ] }, { - "operation_id": "PUT:/app/api/locations", - "test_case_id": "faults.java#test_102", - "fault_categories": [ + "operationId": "PUT:/app/api/locations", + "testCaseId": "faults.java#test_102", + "faultCategories": [ { "code": 200, "context": "PUT:/app/api/locations -> Response status 400 not defined for path '/api/locations'." @@ -2897,9 +2897,9 @@ ] }, { - "operation_id": "POST:/app/api/departments/save", - "test_case_id": "faults.java#test_103", - "fault_categories": [ + "operationId": "POST:/app/api/departments/save", + "testCaseId": "faults.java#test_103", + "faultCategories": [ { "code": 200, "context": "POST:/app/api/departments/save -> Response status 400 not defined for path '/api/departments/save'." @@ -2907,9 +2907,9 @@ ] }, { - "operation_id": "POST:/app/api/projects", - "test_case_id": "faults.java#test_104", - "fault_categories": [ + "operationId": "POST:/app/api/projects", + "testCaseId": "faults.java#test_104", + "faultCategories": [ { "code": 200, "context": "POST:/app/api/projects -> Response status 400 not defined for path '/api/projects'." @@ -2917,9 +2917,9 @@ ] }, { - "operation_id": "POST:/app/api/assignments", - "test_case_id": "faults.java#test_105", - "fault_categories": [ + "operationId": "POST:/app/api/assignments", + "testCaseId": "faults.java#test_105", + "faultCategories": [ { "code": 200, "context": "POST:/app/api/assignments -> Response status 400 not defined for path '/api/assignments'." @@ -2927,9 +2927,9 @@ ] }, { - "operation_id": "POST:/app/api/departments", - "test_case_id": "faults.java#test_106", - "fault_categories": [ + "operationId": "POST:/app/api/departments", + "testCaseId": "faults.java#test_106", + "faultCategories": [ { "code": 200, "context": "POST:/app/api/departments -> Response status 400 not defined for path '/api/departments'." @@ -2937,9 +2937,9 @@ ] }, { - "operation_id": "POST:/app/api/assignments", - "test_case_id": "faults.java#test_107", - "fault_categories": [ + "operationId": "POST:/app/api/assignments", + "testCaseId": "faults.java#test_107", + "faultCategories": [ { "code": 200, "context": "POST:/app/api/assignments -> Response status 400 not defined for path '/api/assignments'." @@ -2947,9 +2947,9 @@ ] }, { - "operation_id": "PUT:/app/api/assignments", - "test_case_id": "faults.java#test_108", - "fault_categories": [ + "operationId": "PUT:/app/api/assignments", + "testCaseId": "faults.java#test_108", + "faultCategories": [ { "code": 200, "context": "PUT:/app/api/assignments -> Response status 400 not defined for path '/api/assignments'." @@ -2957,9 +2957,9 @@ ] }, { - "operation_id": "POST:/app/api/assignments", - "test_case_id": "faults.java#test_109", - "fault_categories": [ + "operationId": "POST:/app/api/assignments", + "testCaseId": "faults.java#test_109", + "faultCategories": [ { "code": 200, "context": "POST:/app/api/assignments -> Response status 400 not defined for path '/api/assignments'." @@ -2968,10 +2968,10 @@ } ] }, - "problem_details": { + "problemDetails": { "rest": { - "total_http_calls": 130, - "endpoint_ids": [ + "totalHttpCalls": 130, + "endpointIds": [ "GET:/app/api/assignments", "POST:/app/api/assignments", "PUT:/app/api/assignments", @@ -3040,1819 +3040,1819 @@ "GET:/app/api/projects/{id}", "DELETE:/app/api/projects/{id}" ], - "covered_http_status": [ + "coveredHttpStatus": [ { - "endpoint_id": "GET:/app/api/credentials/", - "test_case_id": "faults.java#test_0", - "http_status": [ + "endpointId": "GET:/app/api/credentials/", + "testCaseId": "faults.java#test_0", + "httpStatus": [ 200 ] }, { - "endpoint_id": "GET:/app/api/projects", - "test_case_id": "faults.java#test_1", - "http_status": [ + "endpointId": "GET:/app/api/projects", + "testCaseId": "faults.java#test_1", + "httpStatus": [ 200 ] }, { - "endpoint_id": "GET:/app/api/projects", - "test_case_id": "faults.java#test_2", - "http_status": [ + "endpointId": "GET:/app/api/projects", + "testCaseId": "faults.java#test_2", + "httpStatus": [ 200 ] }, { - "endpoint_id": "POST:/app/api/departments", - "test_case_id": "faults.java#test_3", - "http_status": [ + "endpointId": "POST:/app/api/departments", + "testCaseId": "faults.java#test_3", + "httpStatus": [ 200 ] }, { - "endpoint_id": "POST:/app/api/credentials/save", - "test_case_id": "faults.java#test_4", - "http_status": [ + "endpointId": "POST:/app/api/credentials/save", + "testCaseId": "faults.java#test_4", + "httpStatus": [ 200 ] }, { - "endpoint_id": "GET:/app/api/employees/data/manager-project-data/{employeeId}", - "test_case_id": "faults.java#test_5", - "http_status": [ + "endpointId": "GET:/app/api/employees/data/manager-project-data/{employeeId}", + "testCaseId": "faults.java#test_5", + "httpStatus": [ 200 ] }, { - "endpoint_id": "POST:/app/api/credentials", - "test_case_id": "faults.java#test_6", - "http_status": [ + "endpointId": "POST:/app/api/credentials", + "testCaseId": "faults.java#test_6", + "httpStatus": [ 200 ] }, { - "endpoint_id": "POST:/app/api/credentials", - "test_case_id": "faults.java#test_7", - "http_status": [ + "endpointId": "POST:/app/api/credentials", + "testCaseId": "faults.java#test_7", + "httpStatus": [ 200 ] }, { - "endpoint_id": "PUT:/app/api/credentials/update", - "test_case_id": "faults.java#test_8", - "http_status": [ + "endpointId": "PUT:/app/api/credentials/update", + "testCaseId": "faults.java#test_8", + "httpStatus": [ 200 ] }, { - "endpoint_id": "POST:/app/api/departments", - "test_case_id": "faults.java#test_9", - "http_status": [ + "endpointId": "POST:/app/api/departments", + "testCaseId": "faults.java#test_9", + "httpStatus": [ 200 ] }, { - "endpoint_id": "POST:/app/api/projects", - "test_case_id": "faults.java#test_10", - "http_status": [ + "endpointId": "POST:/app/api/projects", + "testCaseId": "faults.java#test_10", + "httpStatus": [ 200 ] }, { - "endpoint_id": "POST:/app/api/credentials", - "test_case_id": "faults.java#test_11", - "http_status": [ + "endpointId": "POST:/app/api/credentials", + "testCaseId": "faults.java#test_11", + "httpStatus": [ 400 ] }, { - "endpoint_id": "GET:/app/api/credentials", - "test_case_id": "faults.java#test_11", - "http_status": [ + "endpointId": "GET:/app/api/credentials", + "testCaseId": "faults.java#test_11", + "httpStatus": [ 200 ] }, { - "endpoint_id": "GET:/app/api/employees", - "test_case_id": "faults.java#test_12", - "http_status": [ + "endpointId": "GET:/app/api/employees", + "testCaseId": "faults.java#test_12", + "httpStatus": [ 200 ] }, { - "endpoint_id": "GET:/app/api/employees/", - "test_case_id": "faults.java#test_13", - "http_status": [ + "endpointId": "GET:/app/api/employees/", + "testCaseId": "faults.java#test_13", + "httpStatus": [ 200 ] }, { - "endpoint_id": "PUT:/app/api/locations", - "test_case_id": "faults.java#test_14", - "http_status": [ + "endpointId": "PUT:/app/api/locations", + "testCaseId": "faults.java#test_14", + "httpStatus": [ 400 ] }, { - "endpoint_id": "POST:/app/api/locations", - "test_case_id": "faults.java#test_14", - "http_status": [ + "endpointId": "POST:/app/api/locations", + "testCaseId": "faults.java#test_14", + "httpStatus": [ 200 ] }, { - "endpoint_id": "POST:/app/api/projects", - "test_case_id": "faults.java#test_15", - "http_status": [ + "endpointId": "POST:/app/api/projects", + "testCaseId": "faults.java#test_15", + "httpStatus": [ 200 ] }, { - "endpoint_id": "PUT:/app/api/projects", - "test_case_id": "faults.java#test_15", - "http_status": [ + "endpointId": "PUT:/app/api/projects", + "testCaseId": "faults.java#test_15", + "httpStatus": [ 400 ] }, { - "endpoint_id": "GET:/app/api/assignments", - "test_case_id": "faults.java#test_16", - "http_status": [ + "endpointId": "GET:/app/api/assignments", + "testCaseId": "faults.java#test_16", + "httpStatus": [ 200 ] }, { - "endpoint_id": "GET:/app/api/assignments/", - "test_case_id": "faults.java#test_17", - "http_status": [ + "endpointId": "GET:/app/api/assignments/", + "testCaseId": "faults.java#test_17", + "httpStatus": [ 200 ] }, { - "endpoint_id": "GET:/app/api/assignments/{employeeId}/{projectId}", - "test_case_id": "faults.java#test_18", - "http_status": [ + "endpointId": "GET:/app/api/assignments/{employeeId}/{projectId}", + "testCaseId": "faults.java#test_18", + "httpStatus": [ 400 ] }, { - "endpoint_id": "POST:/app/api/projects", - "test_case_id": "faults.java#test_19", - "http_status": [ + "endpointId": "POST:/app/api/projects", + "testCaseId": "faults.java#test_19", + "httpStatus": [ 400 ] }, { - "endpoint_id": "POST:/app/api/projects/save", - "test_case_id": "faults.java#test_20", - "http_status": [ + "endpointId": "POST:/app/api/projects/save", + "testCaseId": "faults.java#test_20", + "httpStatus": [ 400 ] }, { - "endpoint_id": "DELETE:/app/api/assignments/delete/{employeeId}/{projectId}/{commitDate}", - "test_case_id": "faults.java#test_21", - "http_status": [ + "endpointId": "DELETE:/app/api/assignments/delete/{employeeId}/{projectId}/{commitDate}", + "testCaseId": "faults.java#test_21", + "httpStatus": [ 400 ] }, { - "endpoint_id": "GET:/app/api/employees/data/department/{departmentId}", - "test_case_id": "faults.java#test_22", - "http_status": [ + "endpointId": "GET:/app/api/employees/data/department/{departmentId}", + "testCaseId": "faults.java#test_22", + "httpStatus": [ 400 ] }, { - "endpoint_id": "DELETE:/app/api/departments/delete/{id}", - "test_case_id": "faults.java#test_23", - "http_status": [ + "endpointId": "DELETE:/app/api/departments/delete/{id}", + "testCaseId": "faults.java#test_23", + "httpStatus": [ 400 ] }, { - "endpoint_id": "DELETE:/app/api/employees/{id}", - "test_case_id": "faults.java#test_24", - "http_status": [ + "endpointId": "DELETE:/app/api/employees/{id}", + "testCaseId": "faults.java#test_24", + "httpStatus": [ 400 ] }, { - "endpoint_id": "DELETE:/app/api/locations/delete/{id}", - "test_case_id": "faults.java#test_25", - "http_status": [ + "endpointId": "DELETE:/app/api/locations/delete/{id}", + "testCaseId": "faults.java#test_25", + "httpStatus": [ 400 ] }, { - "endpoint_id": "DELETE:/app/api/projects/delete/{id}", - "test_case_id": "faults.java#test_26", - "http_status": [ + "endpointId": "DELETE:/app/api/projects/delete/{id}", + "testCaseId": "faults.java#test_26", + "httpStatus": [ 400 ] }, { - "endpoint_id": "GET:/app/api/departments/{id}", - "test_case_id": "faults.java#test_27", - "http_status": [ + "endpointId": "GET:/app/api/departments/{id}", + "testCaseId": "faults.java#test_27", + "httpStatus": [ 400 ] }, { - "endpoint_id": "PUT:/app/api/projects", - "test_case_id": "faults.java#test_28", - "http_status": [ + "endpointId": "PUT:/app/api/projects", + "testCaseId": "faults.java#test_28", + "httpStatus": [ 400 ] }, { - "endpoint_id": "PUT:/app/api/projects", - "test_case_id": "faults.java#test_29", - "http_status": [ + "endpointId": "PUT:/app/api/projects", + "testCaseId": "faults.java#test_29", + "httpStatus": [ 400 ] }, { - "endpoint_id": "GET:/app/api/assignments/data/project-commit/{employeeId}/{projectId}", - "test_case_id": "faults.java#test_30", - "http_status": [ + "endpointId": "GET:/app/api/assignments/data/project-commit/{employeeId}/{projectId}", + "testCaseId": "faults.java#test_30", + "httpStatus": [ 400 ] }, { - "endpoint_id": "GET:/app/api/assignments/{employeeId}/{projectId}/{commitDate}", - "test_case_id": "faults.java#test_31", - "http_status": [ + "endpointId": "GET:/app/api/assignments/{employeeId}/{projectId}/{commitDate}", + "testCaseId": "faults.java#test_31", + "httpStatus": [ 400 ] }, { - "endpoint_id": "GET:/app/api/employees/data/manager-project-data/{employeeId}", - "test_case_id": "faults.java#test_32", - "http_status": [ + "endpointId": "GET:/app/api/employees/data/manager-project-data/{employeeId}", + "testCaseId": "faults.java#test_32", + "httpStatus": [ 400 ] }, { - "endpoint_id": "DELETE:/app/api/credentials/delete/{id}", - "test_case_id": "faults.java#test_33", - "http_status": [ + "endpointId": "DELETE:/app/api/credentials/delete/{id}", + "testCaseId": "faults.java#test_33", + "httpStatus": [ 400 ] }, { - "endpoint_id": "GET:/app/api/credentials/{id}", - "test_case_id": "faults.java#test_34", - "http_status": [ + "endpointId": "GET:/app/api/credentials/{id}", + "testCaseId": "faults.java#test_34", + "httpStatus": [ 400 ] }, { - "endpoint_id": "GET:/app/api/employees/{id}", - "test_case_id": "faults.java#test_35", - "http_status": [ + "endpointId": "GET:/app/api/employees/{id}", + "testCaseId": "faults.java#test_35", + "httpStatus": [ 400 ] }, { - "endpoint_id": "GET:/app/api/projects/{id}", - "test_case_id": "faults.java#test_36", - "http_status": [ + "endpointId": "GET:/app/api/projects/{id}", + "testCaseId": "faults.java#test_36", + "httpStatus": [ 400 ] }, { - "endpoint_id": "DELETE:/app/api/projects/{id}", - "test_case_id": "faults.java#test_37", - "http_status": [ + "endpointId": "DELETE:/app/api/projects/{id}", + "testCaseId": "faults.java#test_37", + "httpStatus": [ 400 ] }, { - "endpoint_id": "DELETE:/app/api/credentials/username/{username}", - "test_case_id": "faults.java#test_38", - "http_status": [ + "endpointId": "DELETE:/app/api/credentials/username/{username}", + "testCaseId": "faults.java#test_38", + "httpStatus": [ 400 ] }, { - "endpoint_id": "GET:/app/api/employees/username/{username}", - "test_case_id": "faults.java#test_39", - "http_status": [ + "endpointId": "GET:/app/api/employees/username/{username}", + "testCaseId": "faults.java#test_39", + "httpStatus": [ 400 ] }, { - "endpoint_id": "GET:/app/api/credentials/username/{username}", - "test_case_id": "faults.java#test_40", - "http_status": [ + "endpointId": "GET:/app/api/credentials/username/{username}", + "testCaseId": "faults.java#test_40", + "httpStatus": [ 400 ] }, { - "endpoint_id": "PUT:/app/api/assignments", - "test_case_id": "faults.java#test_41", - "http_status": [ + "endpointId": "PUT:/app/api/assignments", + "testCaseId": "faults.java#test_41", + "httpStatus": [ 400 ] }, { - "endpoint_id": "GET:/app/api/credentials/username/{username}", - "test_case_id": "faults.java#test_42", - "http_status": [ + "endpointId": "GET:/app/api/credentials/username/{username}", + "testCaseId": "faults.java#test_42", + "httpStatus": [ 400 ] }, { - "endpoint_id": "POST:/app/api/locations/save", - "test_case_id": "faults.java#test_43", - "http_status": [ + "endpointId": "POST:/app/api/locations/save", + "testCaseId": "faults.java#test_43", + "httpStatus": [ 400 ] }, { - "endpoint_id": "PUT:/app/api/locations/update", - "test_case_id": "faults.java#test_44", - "http_status": [ + "endpointId": "PUT:/app/api/locations/update", + "testCaseId": "faults.java#test_44", + "httpStatus": [ 400 ] }, { - "endpoint_id": "PUT:/app/api/departments", - "test_case_id": "faults.java#test_45", - "http_status": [ + "endpointId": "PUT:/app/api/departments", + "testCaseId": "faults.java#test_45", + "httpStatus": [ 400 ] }, { - "endpoint_id": "PUT:/app/api/departments", - "test_case_id": "faults.java#test_46", - "http_status": [ + "endpointId": "PUT:/app/api/departments", + "testCaseId": "faults.java#test_46", + "httpStatus": [ 400 ] }, { - "endpoint_id": "POST:/app/api/authenticate", - "test_case_id": "faults.java#test_47", - "http_status": [ + "endpointId": "POST:/app/api/authenticate", + "testCaseId": "faults.java#test_47", + "httpStatus": [ 400 ] }, { - "endpoint_id": "PUT:/app/api/departments", - "test_case_id": "faults.java#test_48", - "http_status": [ + "endpointId": "PUT:/app/api/departments", + "testCaseId": "faults.java#test_48", + "httpStatus": [ 400 ] }, { - "endpoint_id": "PUT:/app/api/employees", - "test_case_id": "faults.java#test_49", - "http_status": [ + "endpointId": "PUT:/app/api/employees", + "testCaseId": "faults.java#test_49", + "httpStatus": [ 400 ] }, { - "endpoint_id": "PUT:/app/api/employees/update", - "test_case_id": "faults.java#test_50", - "http_status": [ + "endpointId": "PUT:/app/api/employees/update", + "testCaseId": "faults.java#test_50", + "httpStatus": [ 400 ] }, { - "endpoint_id": "POST:/app/api/credentials", - "test_case_id": "faults.java#test_51", - "http_status": [ + "endpointId": "POST:/app/api/credentials", + "testCaseId": "faults.java#test_51", + "httpStatus": [ 400 ] }, { - "endpoint_id": "POST:/app/api/employees/save", - "test_case_id": "faults.java#test_52", - "http_status": [ + "endpointId": "POST:/app/api/employees/save", + "testCaseId": "faults.java#test_52", + "httpStatus": [ 400 ] }, { - "endpoint_id": "PUT:/app/api/assignments/update", - "test_case_id": "faults.java#test_53", - "http_status": [ + "endpointId": "PUT:/app/api/assignments/update", + "testCaseId": "faults.java#test_53", + "httpStatus": [ 400 ] }, { - "endpoint_id": "POST:/app/api/assignments", - "test_case_id": "faults.java#test_54", - "http_status": [ + "endpointId": "POST:/app/api/assignments", + "testCaseId": "faults.java#test_54", + "httpStatus": [ 400 ] }, { - "endpoint_id": "GET:/app/api/assignments/data/project-commit/{projectId}", - "test_case_id": "faults.java#test_55", - "http_status": [ + "endpointId": "GET:/app/api/assignments/data/project-commit/{projectId}", + "testCaseId": "faults.java#test_55", + "httpStatus": [ 400 ] }, { - "endpoint_id": "DELETE:/app/api/projects/{id}", - "test_case_id": "faults.java#test_56", - "http_status": [ + "endpointId": "DELETE:/app/api/projects/{id}", + "testCaseId": "faults.java#test_56", + "httpStatus": [ 400 ] }, { - "endpoint_id": "GET:/app/api/locations/{id}", - "test_case_id": "faults.java#test_57", - "http_status": [ + "endpointId": "GET:/app/api/locations/{id}", + "testCaseId": "faults.java#test_57", + "httpStatus": [ 400 ] }, { - "endpoint_id": "PUT:/app/api/projects", - "test_case_id": "faults.java#test_58", - "http_status": [ + "endpointId": "PUT:/app/api/projects", + "testCaseId": "faults.java#test_58", + "httpStatus": [ 400 ] }, { - "endpoint_id": "DELETE:/app/api/employees/username/{username}", - "test_case_id": "faults.java#test_59", - "http_status": [ + "endpointId": "DELETE:/app/api/employees/username/{username}", + "testCaseId": "faults.java#test_59", + "httpStatus": [ 400 ] }, { - "endpoint_id": "POST:/app/api/projects/save", - "test_case_id": "faults.java#test_60", - "http_status": [ + "endpointId": "POST:/app/api/projects/save", + "testCaseId": "faults.java#test_60", + "httpStatus": [ 400 ] }, { - "endpoint_id": "POST:/app/api/projects", - "test_case_id": "faults.java#test_61", - "http_status": [ + "endpointId": "POST:/app/api/projects", + "testCaseId": "faults.java#test_61", + "httpStatus": [ 400 ] }, { - "endpoint_id": "DELETE:/app/api/employees/username/{username}", - "test_case_id": "faults.java#test_62", - "http_status": [ + "endpointId": "DELETE:/app/api/employees/username/{username}", + "testCaseId": "faults.java#test_62", + "httpStatus": [ 400 ] }, { - "endpoint_id": "GET:/app/api/assignments/data/project-commit/{employeeId}/{projectId}/{commitDate}", - "test_case_id": "faults.java#test_63", - "http_status": [ + "endpointId": "GET:/app/api/assignments/data/project-commit/{employeeId}/{projectId}/{commitDate}", + "testCaseId": "faults.java#test_63", + "httpStatus": [ 400 ] }, { - "endpoint_id": "GET:/app/api/assignments/data/project-commit/{employeeId}/{projectId}", - "test_case_id": "faults.java#test_64", - "http_status": [ + "endpointId": "GET:/app/api/assignments/data/project-commit/{employeeId}/{projectId}", + "testCaseId": "faults.java#test_64", + "httpStatus": [ 400 ] }, { - "endpoint_id": "DELETE:/app/api/assignments/{employeeId}/{projectId}/{commitDate}", - "test_case_id": "faults.java#test_65", - "http_status": [ + "endpointId": "DELETE:/app/api/assignments/{employeeId}/{projectId}/{commitDate}", + "testCaseId": "faults.java#test_65", + "httpStatus": [ 400 ] }, { - "endpoint_id": "GET:/app/api/employees/data/employee-project-data/{employeeId}", - "test_case_id": "faults.java#test_66", - "http_status": [ + "endpointId": "GET:/app/api/employees/data/employee-project-data/{employeeId}", + "testCaseId": "faults.java#test_66", + "httpStatus": [ 400 ] }, { - "endpoint_id": "DELETE:/app/api/departments/{id}", - "test_case_id": "faults.java#test_67", - "http_status": [ + "endpointId": "DELETE:/app/api/departments/{id}", + "testCaseId": "faults.java#test_67", + "httpStatus": [ 400 ] }, { - "endpoint_id": "DELETE:/app/api/locations/{id}", - "test_case_id": "faults.java#test_68", - "http_status": [ + "endpointId": "DELETE:/app/api/locations/{id}", + "testCaseId": "faults.java#test_68", + "httpStatus": [ 400 ] }, { - "endpoint_id": "GET:/app/api/assignments/data/project-commit/{employeeId}/{projectId}/{commitDate}", - "test_case_id": "faults.java#test_69", - "http_status": [ + "endpointId": "GET:/app/api/assignments/data/project-commit/{employeeId}/{projectId}/{commitDate}", + "testCaseId": "faults.java#test_69", + "httpStatus": [ 400 ] }, { - "endpoint_id": "GET:/app/api/assignments/data/project-commit/{employeeId}/{projectId}", - "test_case_id": "faults.java#test_70", - "http_status": [ + "endpointId": "GET:/app/api/assignments/data/project-commit/{employeeId}/{projectId}", + "testCaseId": "faults.java#test_70", + "httpStatus": [ 400 ] }, { - "endpoint_id": "DELETE:/app/api/credentials/{id}", - "test_case_id": "faults.java#test_71", - "http_status": [ + "endpointId": "DELETE:/app/api/credentials/{id}", + "testCaseId": "faults.java#test_71", + "httpStatus": [ 400 ] }, { - "endpoint_id": "DELETE:/app/api/employees/delete/{id}", - "test_case_id": "faults.java#test_72", - "http_status": [ + "endpointId": "DELETE:/app/api/employees/delete/{id}", + "testCaseId": "faults.java#test_72", + "httpStatus": [ 400 ] }, { - "endpoint_id": "POST:/app/api/employees/save", - "test_case_id": "faults.java#test_73", - "http_status": [ + "endpointId": "POST:/app/api/employees/save", + "testCaseId": "faults.java#test_73", + "httpStatus": [ 400 ] }, { - "endpoint_id": "PUT:/app/api/projects/update", - "test_case_id": "faults.java#test_74", - "http_status": [ + "endpointId": "PUT:/app/api/projects/update", + "testCaseId": "faults.java#test_74", + "httpStatus": [ 400 ] }, { - "endpoint_id": "POST:/app/api/locations", - "test_case_id": "faults.java#test_75", - "http_status": [ + "endpointId": "POST:/app/api/locations", + "testCaseId": "faults.java#test_75", + "httpStatus": [ 400 ] }, { - "endpoint_id": "POST:/app/api/assignments", - "test_case_id": "faults.java#test_76", - "http_status": [ + "endpointId": "POST:/app/api/assignments", + "testCaseId": "faults.java#test_76", + "httpStatus": [ 400 ] }, { - "endpoint_id": "PUT:/app/api/assignments/update", - "test_case_id": "faults.java#test_77", - "http_status": [ + "endpointId": "PUT:/app/api/assignments/update", + "testCaseId": "faults.java#test_77", + "httpStatus": [ 400 ] }, { - "endpoint_id": "POST:/app/api/assignments/save", - "test_case_id": "faults.java#test_78", - "http_status": [ + "endpointId": "POST:/app/api/assignments/save", + "testCaseId": "faults.java#test_78", + "httpStatus": [ 400 ] }, { - "endpoint_id": "POST:/app/api/departments", - "test_case_id": "faults.java#test_79", - "http_status": [ + "endpointId": "POST:/app/api/departments", + "testCaseId": "faults.java#test_79", + "httpStatus": [ 400 ] }, { - "endpoint_id": "POST:/app/api/assignments", - "test_case_id": "faults.java#test_80", - "http_status": [ + "endpointId": "POST:/app/api/assignments", + "testCaseId": "faults.java#test_80", + "httpStatus": [ 400 ] }, { - "endpoint_id": "PUT:/app/api/credentials", - "test_case_id": "faults.java#test_81", - "http_status": [ + "endpointId": "PUT:/app/api/credentials", + "testCaseId": "faults.java#test_81", + "httpStatus": [ 400 ] }, { - "endpoint_id": "PUT:/app/api/projects/update", - "test_case_id": "faults.java#test_82", - "http_status": [ + "endpointId": "PUT:/app/api/projects/update", + "testCaseId": "faults.java#test_82", + "httpStatus": [ 400 ] }, { - "endpoint_id": "PUT:/app/api/projects", - "test_case_id": "faults.java#test_83", - "http_status": [ + "endpointId": "PUT:/app/api/projects", + "testCaseId": "faults.java#test_83", + "httpStatus": [ 400 ] }, { - "endpoint_id": "POST:/app/api/departments/save", - "test_case_id": "faults.java#test_84", - "http_status": [ + "endpointId": "POST:/app/api/departments/save", + "testCaseId": "faults.java#test_84", + "httpStatus": [ 400 ] }, { - "endpoint_id": "PUT:/app/api/departments/update", - "test_case_id": "faults.java#test_85", - "http_status": [ + "endpointId": "PUT:/app/api/departments/update", + "testCaseId": "faults.java#test_85", + "httpStatus": [ 400 ] }, { - "endpoint_id": "PUT:/app/api/departments/update", - "test_case_id": "faults.java#test_86", - "http_status": [ + "endpointId": "PUT:/app/api/departments/update", + "testCaseId": "faults.java#test_86", + "httpStatus": [ 400 ] }, { - "endpoint_id": "POST:/app/api/credentials/save", - "test_case_id": "faults.java#test_87", - "http_status": [ + "endpointId": "POST:/app/api/credentials/save", + "testCaseId": "faults.java#test_87", + "httpStatus": [ 400 ] }, { - "endpoint_id": "PUT:/app/api/credentials/update", - "test_case_id": "faults.java#test_88", - "http_status": [ + "endpointId": "PUT:/app/api/credentials/update", + "testCaseId": "faults.java#test_88", + "httpStatus": [ 400 ] }, { - "endpoint_id": "POST:/app/api/assignments", - "test_case_id": "faults.java#test_89", - "http_status": [ + "endpointId": "POST:/app/api/assignments", + "testCaseId": "faults.java#test_89", + "httpStatus": [ 400 ] }, { - "endpoint_id": "PUT:/app/api/departments/update", - "test_case_id": "faults.java#test_90", - "http_status": [ + "endpointId": "PUT:/app/api/departments/update", + "testCaseId": "faults.java#test_90", + "httpStatus": [ 400 ] }, { - "endpoint_id": "DELETE:/app/api/credentials/{id}", - "test_case_id": "faults.java#test_91", - "http_status": [ + "endpointId": "DELETE:/app/api/credentials/{id}", + "testCaseId": "faults.java#test_91", + "httpStatus": [ 400 ] }, { - "endpoint_id": "POST:/app/api/employees", - "test_case_id": "faults.java#test_92", - "http_status": [ + "endpointId": "POST:/app/api/employees", + "testCaseId": "faults.java#test_92", + "httpStatus": [ 400 ] }, { - "endpoint_id": "POST:/app/api/locations", - "test_case_id": "faults.java#test_93", - "http_status": [ + "endpointId": "POST:/app/api/locations", + "testCaseId": "faults.java#test_93", + "httpStatus": [ 400 ] }, { - "endpoint_id": "POST:/app/api/authenticate/", - "test_case_id": "faults.java#test_94", - "http_status": [ + "endpointId": "POST:/app/api/authenticate/", + "testCaseId": "faults.java#test_94", + "httpStatus": [ 400 ] }, { - "endpoint_id": "PUT:/app/api/projects", - "test_case_id": "faults.java#test_95", - "http_status": [ + "endpointId": "PUT:/app/api/projects", + "testCaseId": "faults.java#test_95", + "httpStatus": [ 400 ] }, { - "endpoint_id": "PUT:/app/api/locations/update", - "test_case_id": "faults.java#test_96", - "http_status": [ + "endpointId": "PUT:/app/api/locations/update", + "testCaseId": "faults.java#test_96", + "httpStatus": [ 400 ] }, { - "endpoint_id": "POST:/app/api/authenticate/", - "test_case_id": "faults.java#test_97", - "http_status": [ + "endpointId": "POST:/app/api/authenticate/", + "testCaseId": "faults.java#test_97", + "httpStatus": [ 400 ] }, { - "endpoint_id": "POST:/app/api/assignments/save", - "test_case_id": "faults.java#test_98", - "http_status": [ + "endpointId": "POST:/app/api/assignments/save", + "testCaseId": "faults.java#test_98", + "httpStatus": [ 400 ] }, { - "endpoint_id": "PUT:/app/api/departments", - "test_case_id": "faults.java#test_99", - "http_status": [ + "endpointId": "PUT:/app/api/departments", + "testCaseId": "faults.java#test_99", + "httpStatus": [ 400 ] }, { - "endpoint_id": "PUT:/app/api/assignments/update", - "test_case_id": "faults.java#test_100", - "http_status": [ + "endpointId": "PUT:/app/api/assignments/update", + "testCaseId": "faults.java#test_100", + "httpStatus": [ 400 ] }, { - "endpoint_id": "POST:/app/api/assignments", - "test_case_id": "faults.java#test_101", - "http_status": [ + "endpointId": "POST:/app/api/assignments", + "testCaseId": "faults.java#test_101", + "httpStatus": [ 400 ] }, { - "endpoint_id": "PUT:/app/api/locations", - "test_case_id": "faults.java#test_102", - "http_status": [ + "endpointId": "PUT:/app/api/locations", + "testCaseId": "faults.java#test_102", + "httpStatus": [ 400 ] }, { - "endpoint_id": "POST:/app/api/departments/save", - "test_case_id": "faults.java#test_103", - "http_status": [ + "endpointId": "POST:/app/api/departments/save", + "testCaseId": "faults.java#test_103", + "httpStatus": [ 400 ] }, { - "endpoint_id": "POST:/app/api/projects", - "test_case_id": "faults.java#test_104", - "http_status": [ + "endpointId": "POST:/app/api/projects", + "testCaseId": "faults.java#test_104", + "httpStatus": [ 400 ] }, { - "endpoint_id": "POST:/app/api/assignments", - "test_case_id": "faults.java#test_105", - "http_status": [ + "endpointId": "POST:/app/api/assignments", + "testCaseId": "faults.java#test_105", + "httpStatus": [ 400 ] }, { - "endpoint_id": "POST:/app/api/departments", - "test_case_id": "faults.java#test_106", - "http_status": [ + "endpointId": "POST:/app/api/departments", + "testCaseId": "faults.java#test_106", + "httpStatus": [ 400 ] }, { - "endpoint_id": "POST:/app/api/assignments", - "test_case_id": "faults.java#test_107", - "http_status": [ + "endpointId": "POST:/app/api/assignments", + "testCaseId": "faults.java#test_107", + "httpStatus": [ 400 ] }, { - "endpoint_id": "PUT:/app/api/assignments", - "test_case_id": "faults.java#test_108", - "http_status": [ + "endpointId": "PUT:/app/api/assignments", + "testCaseId": "faults.java#test_108", + "httpStatus": [ 400 ] }, { - "endpoint_id": "POST:/app/api/assignments", - "test_case_id": "faults.java#test_109", - "http_status": [ + "endpointId": "POST:/app/api/assignments", + "testCaseId": "faults.java#test_109", + "httpStatus": [ 400 ] }, { - "endpoint_id": "GET:/app/v2/api-docs", - "test_case_id": "successes.java#test_0", - "http_status": [ + "endpointId": "GET:/app/v2/api-docs", + "testCaseId": "successes.java#test_0", + "httpStatus": [ 200 ] }, { - "endpoint_id": "GET:/app/api/projects/", - "test_case_id": "successes.java#test_1", - "http_status": [ + "endpointId": "GET:/app/api/projects/", + "testCaseId": "successes.java#test_1", + "httpStatus": [ 200 ] }, { - "endpoint_id": "GET:/app/api/locations", - "test_case_id": "successes.java#test_2", - "http_status": [ + "endpointId": "GET:/app/api/locations", + "testCaseId": "successes.java#test_2", + "httpStatus": [ 200 ] }, { - "endpoint_id": "GET:/app/api/locations", - "test_case_id": "successes.java#test_3", - "http_status": [ + "endpointId": "GET:/app/api/locations", + "testCaseId": "successes.java#test_3", + "httpStatus": [ 200 ] }, { - "endpoint_id": "GET:/app/api/departments", - "test_case_id": "successes.java#test_4", - "http_status": [ + "endpointId": "GET:/app/api/departments", + "testCaseId": "successes.java#test_4", + "httpStatus": [ 200 ] }, { - "endpoint_id": "GET:/app/api/departments/", - "test_case_id": "successes.java#test_5", - "http_status": [ + "endpointId": "GET:/app/api/departments/", + "testCaseId": "successes.java#test_5", + "httpStatus": [ 200 ] }, { - "endpoint_id": "DELETE:/app/api/employees/delete/{id}", - "test_case_id": "successes.java#test_6", - "http_status": [ + "endpointId": "DELETE:/app/api/employees/delete/{id}", + "testCaseId": "successes.java#test_6", + "httpStatus": [ 200 ] }, { - "endpoint_id": "DELETE:/app/api/credentials/username/{username}", - "test_case_id": "successes.java#test_7", - "http_status": [ + "endpointId": "DELETE:/app/api/credentials/username/{username}", + "testCaseId": "successes.java#test_7", + "httpStatus": [ 200 ] }, { - "endpoint_id": "DELETE:/app/api/employees/username/{username}", - "test_case_id": "successes.java#test_8", - "http_status": [ + "endpointId": "DELETE:/app/api/employees/username/{username}", + "testCaseId": "successes.java#test_8", + "httpStatus": [ 200 ] }, { - "endpoint_id": "GET:/app/api/credentials", - "test_case_id": "successes.java#test_9", - "http_status": [ + "endpointId": "GET:/app/api/credentials", + "testCaseId": "successes.java#test_9", + "httpStatus": [ 200 ] }, { - "endpoint_id": "GET:/app/api/credentials/", - "test_case_id": "successes.java#test_10", - "http_status": [ + "endpointId": "GET:/app/api/credentials/", + "testCaseId": "successes.java#test_10", + "httpStatus": [ 200 ] }, { - "endpoint_id": "GET:/app/api/projects/{id}", - "test_case_id": "successes.java#test_11", - "http_status": [ + "endpointId": "GET:/app/api/projects/{id}", + "testCaseId": "successes.java#test_11", + "httpStatus": [ 200 ] }, { - "endpoint_id": "GET:/app/api/locations/", - "test_case_id": "successes.java#test_12", - "http_status": [ + "endpointId": "GET:/app/api/locations/", + "testCaseId": "successes.java#test_12", + "httpStatus": [ 200 ] }, { - "endpoint_id": "PUT:/app/api/locations", - "test_case_id": "successes.java#test_13", - "http_status": [ + "endpointId": "PUT:/app/api/locations", + "testCaseId": "successes.java#test_13", + "httpStatus": [ 200 ] }, { - "endpoint_id": "POST:/app/api/locations/save", - "test_case_id": "successes.java#test_14", - "http_status": [ + "endpointId": "POST:/app/api/locations/save", + "testCaseId": "successes.java#test_14", + "httpStatus": [ 200 ] }, { - "endpoint_id": "PUT:/app/api/credentials", - "test_case_id": "successes.java#test_15", - "http_status": [ + "endpointId": "PUT:/app/api/credentials", + "testCaseId": "successes.java#test_15", + "httpStatus": [ 200 ] }, { - "endpoint_id": "PUT:/app/api/departments/update", - "test_case_id": "successes.java#test_16", - "http_status": [ + "endpointId": "PUT:/app/api/departments/update", + "testCaseId": "successes.java#test_16", + "httpStatus": [ 200 ] } ] } }, - "total_tests": 127, - "test_file_paths": [ + "totalTests": 127, + "testFilePaths": [ "faults.java", "successes.java" ], - "test_cases": [ + "testCases": [ { "id": "faults.java#test_0", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_0", - "start_line": 85, - "end_line": 119 + "startLine": 85, + "endLine": 119 }, { "id": "faults.java#test_1", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_1", - "start_line": 122, - "end_line": 206 + "startLine": 122, + "endLine": 206 }, { "id": "faults.java#test_2", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_2", - "start_line": 209, - "end_line": 295 + "startLine": 209, + "endLine": 295 }, { "id": "faults.java#test_3", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_3", - "start_line": 298, - "end_line": 329 + "startLine": 298, + "endLine": 329 }, { "id": "faults.java#test_4", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_4", - "start_line": 332, - "end_line": 367 + "startLine": 332, + "endLine": 367 }, { "id": "faults.java#test_5", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_5", - "start_line": 370, - "end_line": 412 + "startLine": 370, + "endLine": 412 }, { "id": "faults.java#test_6", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_6", - "start_line": 415, - "end_line": 451 + "startLine": 415, + "endLine": 451 }, { "id": "faults.java#test_7", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_7", - "start_line": 454, - "end_line": 490 + "startLine": 454, + "endLine": 490 }, { "id": "faults.java#test_8", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_8", - "start_line": 493, - "end_line": 528 + "startLine": 493, + "endLine": 528 }, { "id": "faults.java#test_9", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_9", - "start_line": 531, - "end_line": 570 + "startLine": 531, + "endLine": 570 }, { "id": "faults.java#test_10", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_10", - "start_line": 573, - "end_line": 609 + "startLine": 573, + "endLine": 609 }, { "id": "faults.java#test_11", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_11", - "start_line": 612, - "end_line": 668 + "startLine": 612, + "endLine": 668 }, { "id": "faults.java#test_12", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_12", - "start_line": 671, - "end_line": 838 + "startLine": 671, + "endLine": 838 }, { "id": "faults.java#test_13", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_13", - "start_line": 841, - "end_line": 1008 + "startLine": 841, + "endLine": 1008 }, { "id": "faults.java#test_14", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_14", - "start_line": 1011, - "end_line": 1062 + "startLine": 1011, + "endLine": 1062 }, { "id": "faults.java#test_15", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_15", - "start_line": 1065, - "end_line": 1121 + "startLine": 1065, + "endLine": 1121 }, { "id": "faults.java#test_16", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_16", - "start_line": 1124, - "end_line": 1480 + "startLine": 1124, + "endLine": 1480 }, { "id": "faults.java#test_17", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_17", - "start_line": 1483, - "end_line": 1839 + "startLine": 1483, + "endLine": 1839 }, { "id": "faults.java#test_18", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_18", - "start_line": 1842, - "end_line": 1860 + "startLine": 1842, + "endLine": 1860 }, { "id": "faults.java#test_19", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_19", - "start_line": 1863, - "end_line": 1910 + "startLine": 1863, + "endLine": 1910 }, { "id": "faults.java#test_20", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_20", - "start_line": 1913, - "end_line": 1940 + "startLine": 1913, + "endLine": 1940 }, { "id": "faults.java#test_21", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_21", - "start_line": 1943, - "end_line": 1961 + "startLine": 1943, + "endLine": 1961 }, { "id": "faults.java#test_22", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_22", - "start_line": 1964, - "end_line": 1982 + "startLine": 1964, + "endLine": 1982 }, { "id": "faults.java#test_23", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_23", - "start_line": 1985, - "end_line": 2003 + "startLine": 1985, + "endLine": 2003 }, { "id": "faults.java#test_24", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_24", - "start_line": 2006, - "end_line": 2024 + "startLine": 2006, + "endLine": 2024 }, { "id": "faults.java#test_25", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_25", - "start_line": 2027, - "end_line": 2045 + "startLine": 2027, + "endLine": 2045 }, { "id": "faults.java#test_26", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_26", - "start_line": 2048, - "end_line": 2066 + "startLine": 2048, + "endLine": 2066 }, { "id": "faults.java#test_27", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_27", - "start_line": 2069, - "end_line": 2087 + "startLine": 2069, + "endLine": 2087 }, { "id": "faults.java#test_28", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_28", - "start_line": 2090, - "end_line": 2165 + "startLine": 2090, + "endLine": 2165 }, { "id": "faults.java#test_29", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_29", - "start_line": 2168, - "end_line": 2245 + "startLine": 2168, + "endLine": 2245 }, { "id": "faults.java#test_30", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_30", - "start_line": 2248, - "end_line": 2266 + "startLine": 2248, + "endLine": 2266 }, { "id": "faults.java#test_31", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_31", - "start_line": 2269, - "end_line": 2287 + "startLine": 2269, + "endLine": 2287 }, { "id": "faults.java#test_32", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_32", - "start_line": 2290, - "end_line": 2308 + "startLine": 2290, + "endLine": 2308 }, { "id": "faults.java#test_33", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_33", - "start_line": 2311, - "end_line": 2329 + "startLine": 2311, + "endLine": 2329 }, { "id": "faults.java#test_34", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_34", - "start_line": 2332, - "end_line": 2350 + "startLine": 2332, + "endLine": 2350 }, { "id": "faults.java#test_35", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_35", - "start_line": 2353, - "end_line": 2371 + "startLine": 2353, + "endLine": 2371 }, { "id": "faults.java#test_36", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_36", - "start_line": 2374, - "end_line": 2392 + "startLine": 2374, + "endLine": 2392 }, { "id": "faults.java#test_37", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_37", - "start_line": 2395, - "end_line": 2413 + "startLine": 2395, + "endLine": 2413 }, { "id": "faults.java#test_38", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_38", - "start_line": 2416, - "end_line": 2434 + "startLine": 2416, + "endLine": 2434 }, { "id": "faults.java#test_39", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_39", - "start_line": 2437, - "end_line": 2455 + "startLine": 2437, + "endLine": 2455 }, { "id": "faults.java#test_40", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_40", - "start_line": 2458, - "end_line": 2526 + "startLine": 2458, + "endLine": 2526 }, { "id": "faults.java#test_41", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_41", - "start_line": 2529, - "end_line": 2568 + "startLine": 2529, + "endLine": 2568 }, { "id": "faults.java#test_42", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_42", - "start_line": 2571, - "end_line": 2667 + "startLine": 2571, + "endLine": 2667 }, { "id": "faults.java#test_43", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_43", - "start_line": 2670, - "end_line": 2692 + "startLine": 2670, + "endLine": 2692 }, { "id": "faults.java#test_44", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_44", - "start_line": 2695, - "end_line": 2718 + "startLine": 2695, + "endLine": 2718 }, { "id": "faults.java#test_45", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_45", - "start_line": 2721, - "end_line": 2794 + "startLine": 2721, + "endLine": 2794 }, { "id": "faults.java#test_46", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_46", - "start_line": 2797, - "end_line": 2872 + "startLine": 2797, + "endLine": 2872 }, { "id": "faults.java#test_47", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_47", - "start_line": 2875, - "end_line": 2897 + "startLine": 2875, + "endLine": 2897 }, { "id": "faults.java#test_48", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_48", - "start_line": 2900, - "end_line": 2927 + "startLine": 2900, + "endLine": 2927 }, { "id": "faults.java#test_49", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_49", - "start_line": 2930, - "end_line": 2959 + "startLine": 2930, + "endLine": 2959 }, { "id": "faults.java#test_50", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_50", - "start_line": 2962, - "end_line": 2999 + "startLine": 2962, + "endLine": 2999 }, { "id": "faults.java#test_51", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_51", - "start_line": 3002, - "end_line": 3026 + "startLine": 3002, + "endLine": 3026 }, { "id": "faults.java#test_52", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_52", - "start_line": 3029, - "end_line": 3109 + "startLine": 3029, + "endLine": 3109 }, { "id": "faults.java#test_53", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_53", - "start_line": 3112, - "end_line": 3135 + "startLine": 3112, + "endLine": 3135 }, { "id": "faults.java#test_54", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_54", - "start_line": 3138, - "end_line": 3162 + "startLine": 3138, + "endLine": 3162 }, { "id": "faults.java#test_55", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_55", - "start_line": 3165, - "end_line": 3191 + "startLine": 3165, + "endLine": 3191 }, { "id": "faults.java#test_56", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_56", - "start_line": 3194, - "end_line": 3220 + "startLine": 3194, + "endLine": 3220 }, { "id": "faults.java#test_57", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_57", - "start_line": 3223, - "end_line": 3249 + "startLine": 3223, + "endLine": 3249 }, { "id": "faults.java#test_58", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_58", - "start_line": 3252, - "end_line": 3286 + "startLine": 3252, + "endLine": 3286 }, { "id": "faults.java#test_59", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_59", - "start_line": 3289, - "end_line": 3315 + "startLine": 3289, + "endLine": 3315 }, { "id": "faults.java#test_60", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_60", - "start_line": 3318, - "end_line": 3353 + "startLine": 3318, + "endLine": 3353 }, { "id": "faults.java#test_61", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_61", - "start_line": 3356, - "end_line": 3390 + "startLine": 3356, + "endLine": 3390 }, { "id": "faults.java#test_62", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_62", - "start_line": 3393, - "end_line": 3468 + "startLine": 3393, + "endLine": 3468 }, { "id": "faults.java#test_63", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_63", - "start_line": 3471, - "end_line": 3497 + "startLine": 3471, + "endLine": 3497 }, { "id": "faults.java#test_64", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_64", - "start_line": 3500, - "end_line": 3528 + "startLine": 3500, + "endLine": 3528 }, { "id": "faults.java#test_65", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_65", - "start_line": 3531, - "end_line": 3557 + "startLine": 3531, + "endLine": 3557 }, { "id": "faults.java#test_66", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_66", - "start_line": 3560, - "end_line": 3588 + "startLine": 3560, + "endLine": 3588 }, { "id": "faults.java#test_67", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_67", - "start_line": 3591, - "end_line": 3617 + "startLine": 3591, + "endLine": 3617 }, { "id": "faults.java#test_68", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_68", - "start_line": 3620, - "end_line": 3646 + "startLine": 3620, + "endLine": 3646 }, { "id": "faults.java#test_69", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_69", - "start_line": 3649, - "end_line": 3691 + "startLine": 3649, + "endLine": 3691 }, { "id": "faults.java#test_70", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_70", - "start_line": 3694, - "end_line": 3720 + "startLine": 3694, + "endLine": 3720 }, { "id": "faults.java#test_71", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_71", - "start_line": 3723, - "end_line": 3749 + "startLine": 3723, + "endLine": 3749 }, { "id": "faults.java#test_72", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_72", - "start_line": 3752, - "end_line": 3778 + "startLine": 3752, + "endLine": 3778 }, { "id": "faults.java#test_73", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_73", - "start_line": 3781, - "end_line": 3816 + "startLine": 3781, + "endLine": 3816 }, { "id": "faults.java#test_74", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_74", - "start_line": 3819, - "end_line": 3853 + "startLine": 3819, + "endLine": 3853 }, { "id": "faults.java#test_75", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_75", - "start_line": 3856, - "end_line": 3884 + "startLine": 3856, + "endLine": 3884 }, { "id": "faults.java#test_76", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_76", - "start_line": 3887, - "end_line": 3927 + "startLine": 3887, + "endLine": 3927 }, { "id": "faults.java#test_77", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_77", - "start_line": 3930, - "end_line": 3981 + "startLine": 3930, + "endLine": 3981 }, { "id": "faults.java#test_78", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_78", - "start_line": 3984, - "end_line": 4030 + "startLine": 3984, + "endLine": 4030 }, { "id": "faults.java#test_79", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_79", - "start_line": 4033, - "end_line": 4061 + "startLine": 4033, + "endLine": 4061 }, { "id": "faults.java#test_80", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_80", - "start_line": 4064, - "end_line": 4114 + "startLine": 4064, + "endLine": 4114 }, { "id": "faults.java#test_81", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_81", - "start_line": 4117, - "end_line": 4147 + "startLine": 4117, + "endLine": 4147 }, { "id": "faults.java#test_82", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_82", - "start_line": 4150, - "end_line": 4180 + "startLine": 4150, + "endLine": 4180 }, { "id": "faults.java#test_83", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_83", - "start_line": 4183, - "end_line": 4213 + "startLine": 4183, + "endLine": 4213 }, { "id": "faults.java#test_84", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_84", - "start_line": 4216, - "end_line": 4247 + "startLine": 4216, + "endLine": 4247 }, { "id": "faults.java#test_85", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_85", - "start_line": 4250, - "end_line": 4281 + "startLine": 4250, + "endLine": 4281 }, { "id": "faults.java#test_86", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_86", - "start_line": 4284, - "end_line": 4326 + "startLine": 4284, + "endLine": 4326 }, { "id": "faults.java#test_87", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_87", - "start_line": 4329, - "end_line": 4361 + "startLine": 4329, + "endLine": 4361 }, { "id": "faults.java#test_88", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_88", - "start_line": 4364, - "end_line": 4396 + "startLine": 4364, + "endLine": 4396 }, { "id": "faults.java#test_89", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_89", - "start_line": 4399, - "end_line": 4427 + "startLine": 4399, + "endLine": 4427 }, { "id": "faults.java#test_90", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_90", - "start_line": 4430, - "end_line": 4460 + "startLine": 4430, + "endLine": 4460 }, { "id": "faults.java#test_91", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_91", - "start_line": 4463, - "end_line": 4489 + "startLine": 4463, + "endLine": 4489 }, { "id": "faults.java#test_92", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_92", - "start_line": 4492, - "end_line": 4535 + "startLine": 4492, + "endLine": 4535 }, { "id": "faults.java#test_93", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_93", - "start_line": 4538, - "end_line": 4571 + "startLine": 4538, + "endLine": 4571 }, { "id": "faults.java#test_94", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_94", - "start_line": 4574, - "end_line": 4632 + "startLine": 4574, + "endLine": 4632 }, { "id": "faults.java#test_95", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_95", - "start_line": 4635, - "end_line": 4668 + "startLine": 4635, + "endLine": 4668 }, { "id": "faults.java#test_96", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_96", - "start_line": 4671, - "end_line": 4704 + "startLine": 4671, + "endLine": 4704 }, { "id": "faults.java#test_97", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_97", - "start_line": 4707, - "end_line": 4767 + "startLine": 4707, + "endLine": 4767 }, { "id": "faults.java#test_98", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_98", - "start_line": 4770, - "end_line": 4820 + "startLine": 4770, + "endLine": 4820 }, { "id": "faults.java#test_99", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_99", - "start_line": 4823, - "end_line": 4857 + "startLine": 4823, + "endLine": 4857 }, { "id": "faults.java#test_100", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_100", - "start_line": 4860, - "end_line": 4910 + "startLine": 4860, + "endLine": 4910 }, { "id": "faults.java#test_101", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_101", - "start_line": 4913, - "end_line": 4956 + "startLine": 4913, + "endLine": 4956 }, { "id": "faults.java#test_102", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_102", - "start_line": 4959, - "end_line": 4991 + "startLine": 4959, + "endLine": 4991 }, { "id": "faults.java#test_103", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_103", - "start_line": 4994, - "end_line": 5029 + "startLine": 4994, + "endLine": 5029 }, { "id": "faults.java#test_104", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_104", - "start_line": 5032, - "end_line": 5062 + "startLine": 5032, + "endLine": 5062 }, { "id": "faults.java#test_105", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_105", - "start_line": 5065, - "end_line": 5096 + "startLine": 5065, + "endLine": 5096 }, { "id": "faults.java#test_106", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_106", - "start_line": 5099, - "end_line": 5134 + "startLine": 5099, + "endLine": 5134 }, { "id": "faults.java#test_107", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_107", - "start_line": 5137, - "end_line": 5192 + "startLine": 5137, + "endLine": 5192 }, { "id": "faults.java#test_108", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_108", - "start_line": 5195, - "end_line": 5235 + "startLine": 5195, + "endLine": 5235 }, { "id": "faults.java#test_109", - "file_path": "faults.java", + "filePath": "faults.java", "name": "test_109", - "start_line": 5238, - "end_line": 5281 + "startLine": 5238, + "endLine": 5281 }, { "id": "successes.java#test_0", - "file_path": "successes.java", + "filePath": "successes.java", "name": "test_0", - "start_line": 85, - "end_line": 96 + "startLine": 85, + "endLine": 96 }, { "id": "successes.java#test_1", - "file_path": "successes.java", + "filePath": "successes.java", "name": "test_1", - "start_line": 99, - "end_line": 130 + "startLine": 99, + "endLine": 130 }, { "id": "successes.java#test_2", - "file_path": "successes.java", + "filePath": "successes.java", "name": "test_2", - "start_line": 133, - "end_line": 156 + "startLine": 133, + "endLine": 156 }, { "id": "successes.java#test_3", - "file_path": "successes.java", + "filePath": "successes.java", "name": "test_3", - "start_line": 159, - "end_line": 194 + "startLine": 159, + "endLine": 194 }, { "id": "successes.java#test_4", - "file_path": "successes.java", + "filePath": "successes.java", "name": "test_4", - "start_line": 197, - "end_line": 230 + "startLine": 197, + "endLine": 230 }, { "id": "successes.java#test_5", - "file_path": "successes.java", + "filePath": "successes.java", "name": "test_5", - "start_line": 233, - "end_line": 266 + "startLine": 233, + "endLine": 266 }, { "id": "successes.java#test_6", - "file_path": "successes.java", + "filePath": "successes.java", "name": "test_6", - "start_line": 269, - "end_line": 284 + "startLine": 269, + "endLine": 284 }, { "id": "successes.java#test_7", - "file_path": "successes.java", + "filePath": "successes.java", "name": "test_7", - "start_line": 287, - "end_line": 310 + "startLine": 287, + "endLine": 310 }, { "id": "successes.java#test_8", - "file_path": "successes.java", + "filePath": "successes.java", "name": "test_8", - "start_line": 313, - "end_line": 336 + "startLine": 313, + "endLine": 336 }, { "id": "successes.java#test_9", - "file_path": "successes.java", + "filePath": "successes.java", "name": "test_9", - "start_line": 339, - "end_line": 378 + "startLine": 339, + "endLine": 378 }, { "id": "successes.java#test_10", - "file_path": "successes.java", + "filePath": "successes.java", "name": "test_10", - "start_line": 381, - "end_line": 420 + "startLine": 381, + "endLine": 420 }, { "id": "successes.java#test_11", - "file_path": "successes.java", + "filePath": "successes.java", "name": "test_11", - "start_line": 423, - "end_line": 450 + "startLine": 423, + "endLine": 450 }, { "id": "successes.java#test_12", - "file_path": "successes.java", + "filePath": "successes.java", "name": "test_12", - "start_line": 453, - "end_line": 529 + "startLine": 453, + "endLine": 529 }, { "id": "successes.java#test_13", - "file_path": "successes.java", + "filePath": "successes.java", "name": "test_13", - "start_line": 532, - "end_line": 564 + "startLine": 532, + "endLine": 564 }, { "id": "successes.java#test_14", - "file_path": "successes.java", + "filePath": "successes.java", "name": "test_14", - "start_line": 567, - "end_line": 600 + "startLine": 567, + "endLine": 600 }, { "id": "successes.java#test_15", - "file_path": "successes.java", + "filePath": "successes.java", "name": "test_15", - "start_line": 603, - "end_line": 638 + "startLine": 603, + "endLine": 638 }, { "id": "successes.java#test_16", - "file_path": "successes.java", + "filePath": "successes.java", "name": "test_16", - "start_line": 641, - "end_line": 679 + "startLine": 641, + "endLine": 679 } ], "extra": [ { - "tool_name": "EvoMaster", + "toolName": "EvoMaster", "criteria": [ { "name": "Line Coverage", diff --git a/web-report/src-e2e/static/robots.txt b/web-report/src-e2e/static/robots.txt new file mode 100644 index 0000000..6f27bb6 --- /dev/null +++ b/web-report/src-e2e/static/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Disallow: \ No newline at end of file diff --git a/web-report/src/App.css b/web-report/src/App.css index fd26319..73584df 100644 --- a/web-report/src/App.css +++ b/web-report/src/App.css @@ -1,5 +1,6 @@ #root { min-width: 100%; + min-height: 100vh; margin: 0 auto; padding: 2rem; text-align: center; diff --git a/web-report/src/AppProvider.tsx b/web-report/src/AppProvider.tsx index 26b8915..68c9bfc 100644 --- a/web-report/src/AppProvider.tsx +++ b/web-report/src/AppProvider.tsx @@ -2,6 +2,7 @@ import {createContext, useContext, useState, ReactNode, useEffect} from 'react'; import {WebFuzzingCommonsReport} from "@/types/GeneratedTypes.tsx"; import {ITestFiles} from "@/types/General.tsx"; import {fetchFileContent, ITransformedReport, transformWebFuzzingReport} from "@/lib/utils.tsx"; +import {webFuzzingCommonsReportSchema} from "@/types/GeneratedTypesZod.ts"; type AppContextType = { data: WebFuzzingCommonsReport | null; @@ -31,10 +32,17 @@ export const AppProvider = ({ children }: AppProviderProps) => { const fetchData = async () => { try { const jsonData = await fetchFileContent('./report.json') as WebFuzzingCommonsReport; + + // Validate the JSON data against the schema + const report = webFuzzingCommonsReportSchema.safeParse(jsonData); + if (!report.success) { + setError("Invalid report format. Please ensure the report is generated correctly."); + return; + } setData(jsonData); } catch (error: Error | unknown) { if (error instanceof Error) { - setError("Could not load the report file. Please check if the file exists and is accessible in /public folder."); + setError("Could not load the report file. Please check if the file exists and is accessible in main folder."); } else { console.error(error); } @@ -47,8 +55,8 @@ export const AppProvider = ({ children }: AppProviderProps) => { }, []); useEffect(() => { - if(data?.test_file_paths){ - data.test_file_paths.map(file => { + if(data?.testFilePaths){ + data.testFilePaths.map(file => { fetchFileContent(file).then((content) => { if (typeof content === "string") { setTestFiles(prev => [...prev, { @@ -85,7 +93,7 @@ export const AppProvider = ({ children }: AppProviderProps) => { } // Check if any status code or fault code is marked as "removed" - const hasRemovedStatusCode = endpoint.http_status_codes.some(code => + const hasRemovedStatusCode = endpoint.httpStatusCodes.some(code => activeFilters[code.code] === "removed" ); const hasRemovedFaultCode = endpoint.faults.some(code => @@ -93,7 +101,7 @@ export const AppProvider = ({ children }: AppProviderProps) => { ); // Check if any status code or fault code is marked as "active" - const hasActiveStatusCode = endpoint.http_status_codes.some(code => + const hasActiveStatusCode = endpoint.httpStatusCodes.some(code => activeFilters[code.code] === "active" ); const hasActiveFaultCode = endpoint.faults.some(code => diff --git a/web-report/src/assets/info.json b/web-report/src/assets/info.json index a8e3209..c95eb28 100644 --- a/web-report/src/assets/info.json +++ b/web-report/src/assets/info.json @@ -1,18 +1,18 @@ { - "number_of_endpoints": "Number of endpoints (verb:path) in the API.", - "number_of_http_calls": "Total number of HTTP calls in the generated test suites.", - "code_number_identifiers": "Code number identifiers for detected fault types", - "identifier_name": "Identifier name for the fault type.", - "test_files_located": "{number_of_test_cases} test cases are located in {file_name}", - "http_endpoint_codes": "Test cases cover {number_of_endpoints} endpoints returning {code} HTTP codes out of {total_endpoints} endpoints.", - "number_of_faults_per_code": "Number of faults detected for each code.", - "distribution_of_endpoints_per_code": "Faulty endpoints per code (Affected/Total Endpoints).", - "distribution_tooltip": "{operation_count} {endpoint_text} {code} error code out of {total_endpoints} endpoints.", - "generated_test_files": "Number of generated test files.", - "generated_test_cases": "Number of generated test cases.", - "total_faults": "Total number of faults detected in the API.", - "distinct_fault_types": "Total number of distinct fault types detected in the API.", - "creation_date": "Date when the report was generated.", - "tool_name_version": "Name and version of the tool that generated the report.", - "schema_version": "Version of the schema used for the report." + "numberOfEndpoints": "Number of endpoints (verb:path) in the API.", + "numberOfHttpCalls": "Total number of HTTP calls in the generated test suites.", + "codeNumberIdentifiers": "Code number identifiers for detected fault types", + "identifierName": "Identifier name for the fault type.", + "testFilesLocated": "{numberOfTestCases} test cases are located in {fileName}", + "httpEndpointCodes": "Test cases cover {numberOfEndpoints} endpoints returning {code} HTTP codes out of {totalEndpoints} endpoints.", + "numberOfFaultsPerCode": "Number of faults detected for each code.", + "distributionOfEndpointsPerCode": "Faulty endpoints per code (Affected/Total Endpoints).", + "distributionTooltip": "{operationCount} {endpointText} {code} error code out of {totalEndpoints} endpoints.", + "generatedTestFiles": "Number of generated test files.", + "generatedTestCases": "Number of generated test cases.", + "totalFaults": "Total number of faults detected in the API.", + "distinctFaultTypes": "Total number of distinct fault types detected in the API.", + "creationDate": "Date when the report was generated.", + "toolNameVersion": "Name and version of the tool that generated the report.", + "schemaVersion": "Version of the schema used for the report." } \ No newline at end of file diff --git a/web-report/src/components/Dashboard.tsx b/web-report/src/components/Dashboard.tsx index 539bb83..6c41ade 100644 --- a/web-report/src/components/Dashboard.tsx +++ b/web-report/src/components/Dashboard.tsx @@ -22,18 +22,18 @@ export const Dashboard: React.FC = () => { const [testTabs, setTestTabs] = useState>([]); - const addTestTab = (test_name: string, event: React.MouseEvent) => { - if (!testTabs.find((t) => t.value === test_name)) { - setTestTabs([{value: test_name}, ...testTabs]); + const addTestTab = (testName: string, event: React.MouseEvent) => { + if (!testTabs.find((t) => t.value === testName)) { + setTestTabs([{value: testName}, ...testTabs]); } if (!event.ctrlKey) { - setActiveTab(test_name); + setActiveTab(testName); } } - const handleCloseTestsTab = (test_name: string) => { - const updatedTabs = testTabs.filter((t) => t.value !== test_name); + const handleCloseTestsTab = (testName: string) => { + const updatedTabs = testTabs.filter((t) => t.value !== testName); setTestTabs(updatedTabs); if (updatedTabs.length === 0) { setActiveTab("endpoints") @@ -50,18 +50,18 @@ export const Dashboard: React.FC = () => { ); } - const numberOfTestCaseOfFiles = data.test_file_paths.map((test_file) => { + const numberOfTestCaseOfFiles = data.testFilePaths.map((testFile) => { return { - "file_name": test_file, - "number_of_test_cases": data.test_cases.filter((test_case) => test_case.file_path === test_file).length + "fileName": testFile, + "numberOfTestCases": data.testCases.filter((testCase) => testCase.filePath === testFile).length } }); return (
-
+
@@ -111,9 +111,9 @@ export const Dashboard: React.FC = () => {
- @@ -124,7 +124,7 @@ export const Dashboard: React.FC = () => { { testTabs.map((test, index) => ( - + )) } diff --git a/web-report/src/components/EndpointAccordion.tsx b/web-report/src/components/EndpointAccordion.tsx index c0f3e77..8b9bbf6 100644 --- a/web-report/src/components/EndpointAccordion.tsx +++ b/web-report/src/components/EndpointAccordion.tsx @@ -6,13 +6,13 @@ import {getColor} from "@/lib/utils"; interface IStatusType { code: number | string; - test_cases: string[]; + testCases: string[]; } export interface IEndpointAccordionProps { endpoint: string; value: string; - status_codes: IStatusType[]; + statusCodes: IStatusType[]; faults: IStatusType[]; addTestTab: (value: string, event: React.MouseEvent) => void; } @@ -20,13 +20,13 @@ export interface IEndpointAccordionProps { export const EndpointAccordion: React.FC = ({ endpoint, value, - status_codes, + statusCodes, faults, addTestTab }) => { - const sortedStatusCodes = status_codes.sort((a, b) => + const sortedStatusCodes = statusCodes.sort((a, b) => { const codeA = Number(a.code); const codeB = Number(b.code); @@ -40,8 +40,8 @@ export const EndpointAccordion: React.FC = ({ const [selectedCode, setSelectedCode] = useState(sortedStatusCodes[0]?.code || 0); const [isFault, setIsFault] = useState(false); - const selectedTestCases = status_codes.find((code) => code.code === selectedCode)?.test_cases || []; - const selectedFaultTestCases = faults.find((code) => code.code === selectedCode)?.test_cases || []; + const selectedTestCases = statusCodes.find((code) => code.code === selectedCode)?.testCases || []; + const selectedFaultTestCases = faults.find((code) => code.code === selectedCode)?.testCases || []; const sortedFaults = faults.sort((a, b) => { const codeA = Number(a.code); @@ -124,7 +124,7 @@ export const EndpointAccordion: React.FC = ({ (selectedTestCases.length > 0 || selectedFaultTestCases.length > 0) &&
0 && !isFault ? selectedTestCases : selectedFaultTestCases}/> + testCases={selectedTestCases.length > 0 && !isFault ? selectedTestCases : selectedFaultTestCases}/>
} diff --git a/web-report/src/components/FaultsComponent.tsx b/web-report/src/components/FaultsComponent.tsx index de9fe59..c6e88d6 100644 --- a/web-report/src/components/FaultsComponent.tsx +++ b/web-report/src/components/FaultsComponent.tsx @@ -9,11 +9,11 @@ import {ReportTooltip} from "@/components/ui/report-tooltip.tsx"; import {useAppContext} from "@/AppProvider.tsx"; import faults from "../../../src/main/resources/wfc/faults/fault_categories.json"; -export const FaultsComponent: React.FC = ({total_number, found_faults}) => { +export const FaultsComponent: React.FC = ({totalNumber, foundFaults}) => { const {data} = useAppContext(); - const totalEndpointNumber = data?.problem_details.rest?.endpoint_ids.length; + const totalEndpointNumber = data?.problemDetails.rest?.endpointIds.length; - const faultCounts = getFaultCounts(found_faults); + const faultCounts = getFaultCounts(foundFaults); const [isModalOpen, setIsModalOpen] = useState(false) const [currentStatus, setCurrentStatus] = useState(-1); @@ -38,13 +38,13 @@ export const FaultsComponent: React.FC = ({total_number, found_faults})
- + Total Faults: - {total_number} + {totalNumber}
- + Distinct Fault Types: {faultCounts.length} @@ -54,16 +54,16 @@ export const FaultsComponent: React.FC = ({total_number, found_faults})
- +
Codes
- +
Name
- +
Ratio
- +
#
@@ -74,14 +74,14 @@ export const FaultsComponent: React.FC = ({total_number, found_faults})
handleOpenModal(fault.code)}>{fault.code}
handleOpenModal(fault.code)}>{getShortNameOfCode(fault.code)}
- 1 ? "endpoints have" : "endpoint has", + operationCount: fault.operationCount, + endpointText: fault.operationCount > 1 ? "endpoints have" : "endpoint has", code: fault.code, - total_endpoints:totalEndpointNumber ? totalEndpointNumber : 0 + totalEndpoints:totalEndpointNumber ? totalEndpointNumber : 0 })}> -
{fault.operation_count}/{totalEndpointNumber}
+
{fault.operationCount}/{totalEndpointNumber}
{fault.count}
diff --git a/web-report/src/components/GeneratedTests.tsx b/web-report/src/components/GeneratedTests.tsx index b88a5be..6f45e9c 100644 --- a/web-report/src/components/GeneratedTests.tsx +++ b/web-report/src/components/GeneratedTests.tsx @@ -6,52 +6,52 @@ import info from "@/assets/info.json"; import {ReportTooltip} from "@/components/ui/report-tooltip.tsx"; interface IGeneratedTests { - total_tests: number - test_files: Array<{ - file_name: string, - number_of_test_cases: number + totalTests: number + testFiles: Array<{ + fileName: string, + numberOfTestCases: number }> - total_http_calls?: number + totalHttpCalls?: number } -export const GeneratedTests: React.FC = ({total_tests, test_files, total_http_calls}) => ( +export const GeneratedTests: React.FC = ({totalTests, testFiles, totalHttpCalls}) => (
- + Generated Test Files: - {test_files.length} + {testFiles.length}
- + Generated Tests Cases: - {total_tests} + {totalTests}
- + # HTTP Calls: - {total_http_calls} + {totalHttpCalls}
Test Files
{ - test_files.length > 0 ? ( - test_files.map((file, index) => ( + testFiles.length > 0 ? ( + testFiles.map((file, index) => (
-
-
+ - {file.file_name} (# {file.number_of_test_cases}) + {file.fileName} (# {file.numberOfTestCases})
)) diff --git a/web-report/src/components/Header.tsx b/web-report/src/components/Header.tsx index d87bbcc..ff11f15 100644 --- a/web-report/src/components/Header.tsx +++ b/web-report/src/components/Header.tsx @@ -4,24 +4,24 @@ import info from "@/assets/info.json"; interface IHeaderProps { date: string; - tool_name_version: string; - schema_version: string; + toolNameVersion: string; + schemaVersion: string; } -export const Header: React.FC = ({date, tool_name_version, schema_version}) => ( +export const Header: React.FC = ({date, toolNameVersion, schemaVersion}) => ( <>
WEB FUZZING COMMONS
- +
Creation Date: {new Date(date).toUTCString()}
- -
Tool: {tool_name_version}
+ +
Tool: {toolNameVersion}
- -
Schema Version: {schema_version}
+ +
Schema Version: {schemaVersion}
diff --git a/web-report/src/components/RestReports.tsx b/web-report/src/components/RestReports.tsx index cad93e5..2674a83 100644 --- a/web-report/src/components/RestReports.tsx +++ b/web-report/src/components/RestReports.tsx @@ -6,9 +6,9 @@ import {calculateAllStatusCounts, getText} from "@/lib/utils"; import info from "@/assets/info.json"; import {ReportTooltip} from "@/components/ui/report-tooltip.tsx"; -export const RestReports: React.FC = ({covered_http_status, endpoint_ids}) => { - const total = endpoint_ids.length; - const allStatusCounts = calculateAllStatusCounts(covered_http_status, endpoint_ids); +export const RestReports: React.FC = ({coveredHttpStatus, endpointIds}) => { + const total = endpointIds.length; + const allStatusCounts = calculateAllStatusCounts(coveredHttpStatus, endpointIds); return ( @@ -18,31 +18,31 @@ export const RestReports: React.FC = ({covered_http_status, endpoint
- - - - @@ -51,10 +51,10 @@ export const RestReports: React.FC = ({covered_http_status, endpoint
- + # Endpoints: - {endpoint_ids.length} + {endpointIds.length}
diff --git a/web-report/src/components/StatusCodeFilters.tsx b/web-report/src/components/StatusCodeFilters.tsx index 3a22a82..fbe72b5 100644 --- a/web-report/src/components/StatusCodeFilters.tsx +++ b/web-report/src/components/StatusCodeFilters.tsx @@ -13,7 +13,7 @@ export function StatusCodeFilters({data, onFiltersChange}: StatusCodeFiltersProp // Extract all unique status codes from endpoints const allStatusCodes = [...new Map( - data.flatMap(endpoint => endpoint.http_status_codes) + data.flatMap(endpoint => endpoint.httpStatusCodes) .map(item => [item.code, item]) ).values()].sort((a, b) => a.code - b.code); diff --git a/web-report/src/components/TestCases.tsx b/web-report/src/components/TestCases.tsx index 1a4754c..a181089 100644 --- a/web-report/src/components/TestCases.tsx +++ b/web-report/src/components/TestCases.tsx @@ -5,12 +5,12 @@ import {TestCaseButton} from "@/components/TestCaseButton.tsx"; interface ITestCaseProps { code: string | number; - test_cases: Array; + testCases: Array; addTestTab: (value: string, event: React.MouseEvent) => void; isFault: boolean; } -export const TestCases: React.FC = ({code, test_cases, addTestTab, isFault}) => { +export const TestCases: React.FC = ({code, testCases, addTestTab, isFault}) => { return ( <> @@ -19,7 +19,7 @@ export const TestCases: React.FC = ({code, test_cases, addTestTa
{ // Test Cases - test_cases.map((testCase, key) => ( + testCases.map((testCase, key) => ( diff --git a/web-report/src/lib/utils.tsx b/web-report/src/lib/utils.tsx index 737bc26..4509b3d 100644 --- a/web-report/src/lib/utils.tsx +++ b/web-report/src/lib/utils.tsx @@ -67,7 +67,7 @@ export const extractCodeLines = ( return lines.slice(startIndex, endIndex + 2).join('\n'); }; -export const calculateAllStatusCounts = (covered_http_status: CoveredEndpoint[], endpoint_ids:string[]) => { +export const calculateAllStatusCounts = (coveredHttpStatus: CoveredEndpoint[], endpointIds:string[]) => { const allStatusCounts ={ "2XX": 0, "3XX": 0, @@ -75,11 +75,11 @@ export const calculateAllStatusCounts = (covered_http_status: CoveredEndpoint[], "5XX": 0 } - endpoint_ids.map( + endpointIds.map( (endpoint) => { - const allStatusCodes = covered_http_status.filter(status => status.endpoint_id === endpoint) + const allStatusCodes = coveredHttpStatus.filter(status => status.endpointId === endpoint) .map( - (status) => status.http_status + (status) => status.httpStatus ).flat() const uniqueStatusCodes = [...new Set(allStatusCodes)]; @@ -121,20 +121,20 @@ export const calculateAllStatusCounts = (covered_http_status: CoveredEndpoint[], return allStatusCounts; } -export const getFaultCounts = (found_faults: FoundFault[]) => { +export const getFaultCounts = (foundFaults: FoundFault[]) => { const faultCounts = new Map(); - // A fault defines a unique operation_id, code, and context. To define a unique fault, we can use a combination of these three properties. + // A fault defines a unique operationId, code, and context. To define a unique fault, we can use a combination of these three properties. - found_faults.forEach(fault => { - fault.fault_categories.forEach(category => { - faultCounts.set(`${fault.operation_id}|${category.code}|${category.context}`, (faultCounts.get(category.code) || 0) + 1); + foundFaults.forEach(fault => { + fault.faultCategories.forEach(category => { + faultCounts.set(`${fault.operationId}|${category.code}|${category.context}`, (faultCounts.get(category.code) || 0) + 1); }); }); const uniqueFaults = Array.from(faultCounts.keys()).map(key => { const [operationId, code, context] = key.split('|'); return { - operation_id: operationId, + operationId: operationId, code: parseInt(code, 10), context: context || '', count: faultCounts.get(key) @@ -144,11 +144,11 @@ export const getFaultCounts = (found_faults: FoundFault[]) => { return Array.from(uniqueCodes).map(code => { const faultsWithCode = uniqueFaults.filter(fault => fault.code === code); - const uniqueOperationCounts = new Set(faultsWithCode.map(fault => fault.operation_id)).size; + const uniqueOperationCounts = new Set(faultsWithCode.map(fault => fault.operationId)).size; return { code: code, count: faultsWithCode.length, - operation_count: uniqueOperationCounts, + operationCount: uniqueOperationCounts, } }).sort((a, b) => a.code - b.code); } @@ -175,9 +175,9 @@ export const getFileColor = (index: number, file: string) => { return colorList[index % colorList.length]; } -export const getLanguage = (file_name: string) => { +export const getLanguage = (fileName: string) => { - switch (file_name.split('.').pop()) { + switch (fileName.split('.').pop()) { case 'java': return 'java'; case 'js': @@ -197,79 +197,79 @@ export interface ITransformedReport { endpoint: string; faults: { code: number; - test_cases: string[]; + testCases: string[]; }[]; - http_status_codes: { + httpStatusCodes: { code: number; - test_cases: string[]; + testCases: string[]; }[]; } export const transformWebFuzzingReport = (original: WebFuzzingCommonsReport | null): Array => { - if (!original || !original.problem_details || !original.problem_details.rest) { + if (!original || !original.problemDetails || !original.problemDetails.rest) { return []; } const endpointMap = new Map(); - original.problem_details.rest?.endpoint_ids.forEach(endpoint => { + original.problemDetails.rest?.endpointIds.forEach(endpoint => { endpointMap.set(endpoint, { endpoint, - http_status_codes: [], + httpStatusCodes: [], faults: [] }); }); - original.faults.found_faults.forEach(fault => { - if (!fault.operation_id) { + original.faults.foundFaults.forEach(fault => { + if (!fault.operationId) { return; } - if (!endpointMap.has(fault.operation_id)) { - console.log(`Endpoint ${fault.operation_id} not found in endpoint_ids`); + if (!endpointMap.has(fault.operationId)) { + console.log(`Endpoint ${fault.operationId} not found in endpointIds`); } - const endpointData = endpointMap.get(fault.operation_id); + const endpointData = endpointMap.get(fault.operationId); if (!endpointData) { return; } - fault.fault_categories.forEach(faultCat => { + fault.faultCategories.forEach(faultCat => { let existingFault = endpointData.faults.find((f: { code: number; }) => f.code === faultCat.code); if (!existingFault) { - existingFault = {code: faultCat.code, test_cases: []}; + existingFault = {code: faultCat.code, testCases: []}; endpointData.faults.push(existingFault); } - if (!existingFault.test_cases.includes(fault.test_case_id)) { - existingFault.test_cases.push(fault.test_case_id); + if (!existingFault.testCases.includes(fault.testCaseId)) { + existingFault.testCases.push(fault.testCaseId); } }); }); - if (original.problem_details.rest == null) { + if (original.problemDetails.rest == null) { return Array.from([]); } - original.problem_details.rest.covered_http_status.forEach(status => { - if (!endpointMap.has(status.endpoint_id)) { - console.log(`Endpoint ${status.endpoint_id} not found in endpoint_ids`); + original.problemDetails.rest.coveredHttpStatus.forEach(status => { + if (!endpointMap.has(status.endpointId)) { + console.log(`Endpoint ${status.endpointId} not found in endpointIds`); } - const endpointData = endpointMap.get(status.endpoint_id); + const endpointData = endpointMap.get(status.endpointId); - status.http_status.forEach(code => { + status.httpStatus.forEach(code => { if (!endpointData) { return; } - let existingStatus = endpointData.http_status_codes.find((s: { code: number; }) => s.code === code); + let existingStatus = endpointData.httpStatusCodes.find((s: { code: number; }) => s.code === code); if (!existingStatus) { - existingStatus = {code, test_cases: []}; - endpointData.http_status_codes.push(existingStatus); + existingStatus = {code, testCases: []}; + endpointData.httpStatusCodes.push(existingStatus); } - if (!existingStatus.test_cases.includes(status.test_case_id)) { - existingStatus.test_cases.push(status.test_case_id); + if (!existingStatus.testCases.includes(status.testCaseId)) { + existingStatus.testCases.push(status.testCaseId); } }); }); diff --git a/web-report/src/pages/Endpoints.tsx b/web-report/src/pages/Endpoints.tsx index c86c1ff..36081d1 100644 --- a/web-report/src/pages/Endpoints.tsx +++ b/web-report/src/pages/Endpoints.tsx @@ -26,7 +26,7 @@ export const Endpoints: React.FC = ({addTestTab}) => { filteredEndpoints.map((item, index) => ( )) } diff --git a/web-report/src/pages/Overview.tsx b/web-report/src/pages/Overview.tsx index b0c3772..e05119c 100644 --- a/web-report/src/pages/Overview.tsx +++ b/web-report/src/pages/Overview.tsx @@ -6,15 +6,15 @@ import {Faults, RESTReport, TestCase} from "@/types/GeneratedTypes.tsx"; interface IOverviewType { rest: RESTReport | undefined - test_cases: Array, - test_files: Array<{ - file_name: string, - number_of_test_cases: number + testCases: Array, + testFiles: Array<{ + fileName: string, + numberOfTestCases: number }>, faults: Faults } -export const Overview: React.FC = ({rest, test_cases, test_files, faults}) => { +export const Overview: React.FC = ({rest, testCases, testFiles, faults}) => { return (
{/* Left Panel */} @@ -22,7 +22,7 @@ export const Overview: React.FC = ({rest, test_cases, test_files, {/* Right Panel */}
{/* Generated Tests */} - + {/* Faults */}
diff --git a/web-report/src/pages/TestResults.tsx b/web-report/src/pages/TestResults.tsx index e429080..613e771 100644 --- a/web-report/src/pages/TestResults.tsx +++ b/web-report/src/pages/TestResults.tsx @@ -7,35 +7,35 @@ import {useAppContext} from "@/AppProvider.tsx"; interface IProps { - test_case_name: string; + testCaseName: string; } -export const TestResults: React.FC = ({test_case_name}) => { +export const TestResults: React.FC = ({testCaseName}) => { const {data, testFiles} = useAppContext(); - const test_cases = data?.test_cases || []; - const found_faults = data?.faults.found_faults || []; - const problem_details = data?.problem_details || {}; - if (!problem_details.rest) { + const testCases = data?.testCases || []; + const foundFaults = data?.faults.foundFaults || []; + const problemDetails = data?.problemDetails || {}; + if (!problemDetails.rest) { return
We are only supporting REST results now. You need to provide rest results.
} - const test_case = test_cases.find((test) => test.id === test_case_name); - const related_faults = found_faults.filter(fault => fault.test_case_id === test_case_name); - const related_http_status = problem_details.rest.covered_http_status.filter(status => status.test_case_id === test_case_name); + const testCase = testCases.find((test) => test.id === testCaseName); + const relatedFaults = foundFaults.filter(fault => fault.testCaseId === testCaseName); + const relatedHttpStatus = problemDetails.rest.coveredHttpStatus.filter(status => status.testCaseId === testCaseName); - const all_fault_codes = related_faults.map((fault) => - fault.fault_categories.map((f) => f.code)).flat(); - const unique_fault_codes = [...new Set(all_fault_codes)].sort((a, b) => a - b); + const allFaultCodes = relatedFaults.map((fault) => + fault.faultCategories.map((f) => f.code)).flat(); + const uniqueFaultCodes = [...new Set(allFaultCodes)].sort((a, b) => a - b); - const all_status_codes = related_http_status.map((status) => - status.http_status.map((s) => s)).flat(); - const unique_status_codes = [...new Set(all_status_codes)].sort((a, b) => a - b); - const current_file = testFiles.find((file) => file.name === test_case?.file_path); + const allStatusCodes = relatedHttpStatus.map((status) => + status.httpStatus.map((s) => s)).flat(); + const uniqueStatusCodes = [...new Set(allStatusCodes)].sort((a, b) => a - b); + const currentFile = testFiles.find((file) => file.name === testCase?.filePath); - const extractedCode = current_file && test_case ? extractCodeLines(current_file.code, test_case?.start_line, test_case?.end_line) : ""; + const extractedCode = currentFile && testCase ? extractCodeLines(currentFile.code, testCase?.startLine, testCase?.endLine) : ""; return (
@@ -45,14 +45,14 @@ export const TestResults: React.FC = ({test_case_name}) => {

Related Codes

{ - unique_status_codes.length > 0 &&
+ uniqueStatusCodes.length > 0 &&
HTTPS { - unique_status_codes.map((code, i) => ( + uniqueStatusCodes.map((code, i) => ( @@ -63,13 +63,13 @@ export const TestResults: React.FC = ({test_case_name}) => {
} { - unique_fault_codes.length > 0 &&
+ uniqueFaultCodes.length > 0 &&
FAULTS { - unique_fault_codes.map((code, index) => ( + uniqueFaultCodes.map((code, index) => ( @@ -86,12 +86,12 @@ export const TestResults: React.FC = ({test_case_name}) => {
- {test_case?.id} + {testCase?.id}
{ - test_case && current_file && ( + testCase && currentFile && (
-                        
+                        
                     
) } diff --git a/web-report/src/types/GeneratedTypes.tsx b/web-report/src/types/GeneratedTypes.tsx index c82155c..bf15d2f 100644 --- a/web-report/src/types/GeneratedTypes.tsx +++ b/web-report/src/types/GeneratedTypes.tsx @@ -26,36 +26,36 @@ export interface WebFuzzingCommonsReport { /** * The schema version of WFC needed to use to validate and process this document. */ - schema_version: string; + schemaVersion: string; /** * The name of the tool used to create the test cases reported in this document. */ - tool_name: string; + toolName: string; /** * The version number of the used tool, e.g., 1.0.0. */ - tool_version: string; + toolVersion: string; /** * The timestamp of when this report file was created. */ - creation_time: string; + creationTime: string; faults: Faults; - problem_details: { + problemDetails: { rest?: RESTReport; [k: string]: unknown; }; /** * The total number of test cases generated by the tool. */ - total_tests: number; + totalTests: number; /** * The list of relative paths (compared to this document) of all the generated test suite files. */ - test_file_paths: TestFilePath[]; + testFilePaths: TestFilePath[]; /** * Information on each generated test case. */ - test_cases: TestCase[]; + testCases: TestCase[]; /** * Extra, optional coverage information, collected by different tools. */ @@ -66,23 +66,23 @@ export interface Faults { /** * The total number of potential faults identified in the generated test suites. Each fault is uniquely identified with its 'code' category and 'context'. Note that different tests can detect the same fault, and a test case can detect several different faults. */ - total_number: number; + totalNumber: number; /** * Information on all the identified potential faults. */ - found_faults: FoundFault[]; + foundFaults: FoundFault[]; [k: string]: unknown; } /** * Data-structure to represent found faults, based on operations (e.g., HTTP endpoints in REST, and methods in GraphQL and RPC) and which tests find faults in them. */ export interface FoundFault { - operation_id?: OperationId; - test_case_id: TestCaseId; + operationId?: OperationId; + testCaseId: TestCaseId; /** * @minItems 1 */ - fault_categories: [FaultCategoryId, ...FaultCategoryId[]]; + faultCategories: [FaultCategoryId, ...FaultCategoryId[]]; [k: string]: unknown; } /** @@ -103,34 +103,34 @@ export interface RESTReport { /** * Total number of HTTP calls made in all the test cases. A test case could contain several HTTP calls, e.g., a POST followed by a GET and then a DELETE. */ - total_http_calls: number; + totalHttpCalls: number; /** * Unique ids of all the endpoints in the tested API. */ - endpoint_ids: OperationId[]; + endpointIds: OperationId[]; /** * List of which HTTP status codes were covered, based on endpoints. */ - covered_http_status: CoveredEndpoint[]; + coveredHttpStatus: CoveredEndpoint[]; [k: string]: unknown; } /** * Data-structure to represent which HTTP status code where covered on an endpoint by any of the generated tests. */ export interface CoveredEndpoint { - endpoint_id: OperationId; - test_case_id: TestCaseId; + endpointId: OperationId; + testCaseId: TestCaseId; /** * As in a test case the same endpoint could be called more than once, here we report all of the obtained HTTP status codes * * @minItems 1 */ - http_status: [HttpStatus, ...HttpStatus[]]; + httpStatus: [HttpStatus, ...HttpStatus[]]; [k: string]: unknown; } export interface TestCase { id?: TestCaseId; - file_path?: TestFilePath; + filePath?: TestFilePath; /** * The name of the test case, as it appears in the generated test file. */ @@ -138,18 +138,18 @@ export interface TestCase { /** * The line number in the generated test suite file where the code of this test case starts. */ - start_line?: number; + startLine?: number; /** * The line number in the generated test suite file where the code of this test case ends. */ - end_line?: number; + endLine?: number; [k: string]: unknown; } export interface Coverage { /** * The name of the tool used to collect and compute the coverage criteria. */ - tool_name: string; + toolName: string; criteria: CoverageCriterion[]; [k: string]: unknown; } diff --git a/web-report/src/types/GeneratedTypesZod.ts b/web-report/src/types/GeneratedTypesZod.ts new file mode 100644 index 0000000..8601226 --- /dev/null +++ b/web-report/src/types/GeneratedTypesZod.ts @@ -0,0 +1,94 @@ +// Generated by ts-to-zod +import { z } from "zod"; + +export const operationIdSchema = z.string(); + +export const testCaseIdSchema = z.string(); + +export const httpStatusSchema = z.number(); + +export const testFilePathSchema = z.string(); + +export const testCaseSchema = z.record(z.unknown()).and( + z.object({ + id: testCaseIdSchema.optional(), + filePath: testFilePathSchema.optional(), + name: z.string().optional(), + startLine: z.number().optional(), + endLine: z.number().optional(), + }), +); + +export const faultCategoryIdSchema = z.record(z.unknown()).and( + z.object({ + code: z.number(), + context: z.string().optional(), + }), +); + +export const coveredEndpointSchema = z.record(z.unknown()).and( + z.object({ + endpointId: operationIdSchema, + testCaseId: testCaseIdSchema, + httpStatus: z.tuple([httpStatusSchema]).rest(httpStatusSchema), + }), +); + +export const coverageCriterionSchema = z.record(z.unknown()).and( + z.object({ + name: z.string(), + covered: z.number(), + total: z.number().optional(), + }), +); + +export const rESTReportSchema = z.record(z.unknown()).and( + z.object({ + totalHttpCalls: z.number(), + endpointIds: z.array(operationIdSchema), + coveredHttpStatus: z.array(coveredEndpointSchema), + }), +); + +export const coverageSchema = z.record(z.unknown()).and( + z.object({ + toolName: z.string(), + criteria: z.array(coverageCriterionSchema), + }), +); + +export const foundFaultSchema = z.record(z.unknown()).and( + z.object({ + operationId: operationIdSchema.optional(), + testCaseId: testCaseIdSchema, + faultCategories: z + .tuple([faultCategoryIdSchema]) + .rest(faultCategoryIdSchema), + }), +); + +export const faultsSchema = z.record(z.unknown()).and( + z.object({ + totalNumber: z.number(), + foundFaults: z.array(foundFaultSchema), + }), +); + +export const webFuzzingCommonsReportSchema = z.record(z.unknown()).and( + z.object({ + schemaVersion: z.string(), + toolName: z.string(), + toolVersion: z.string(), + creationTime: z.string(), + faults: faultsSchema, + problemDetails: z.record(z.unknown()).and( + z.object({ + rest: rESTReportSchema.optional(), + }), + ), + totalTests: z.number(), + testFilePaths: z.array(testFilePathSchema), + testCases: z.array(testCaseSchema), + extra: z.array(coverageSchema).optional(), + }), +); diff --git a/web-report/vite.config.ts b/web-report/vite.config.ts index 669732a..ef07bff 100644 --- a/web-report/vite.config.ts +++ b/web-report/vite.config.ts @@ -19,8 +19,8 @@ export default defineConfig({ }, }, build: { - outDir: '../target/classes/webreport', - rollupOptions: { + outDir: '../target/classes/webreport', + rollupOptions: { output: { entryFileNames: `assets/report.js`, chunkFileNames: `assets/[name].js`, @@ -33,7 +33,7 @@ export default defineConfig({ return `assets/[name].svg`; } return `assets/[name].[ext]`; - }, + } } } }, diff --git a/web-report/webreport.py b/web-report/webreport.py index 82859e3..d569551 100644 --- a/web-report/webreport.py +++ b/web-report/webreport.py @@ -11,6 +11,12 @@ class Handler(http.server.SimpleHTTPRequestHandler): def __init__(self, *args, **kwargs): super().__init__(*args, directory=os.getcwd(), **kwargs) + def end_headers(self): + self.send_header("Cache-Control", "no-store, no-cache, must-revalidate, max-age=0") + self.send_header("Pragma", "no-cache") + self.send_header("Expires", "0") + super().end_headers() + def start_server(): with socketserver.TCPServer((HOST, PORT), Handler) as httpd: print(f"Serving at http://{HOST}:{PORT}") @@ -18,4 +24,4 @@ def start_server(): httpd.serve_forever() if __name__ == "__main__": - start_server() \ No newline at end of file + start_server() diff --git a/web-report/yarn.lock b/web-report/yarn.lock index b1a84fd..e5bd8b9 100644 --- a/web-report/yarn.lock +++ b/web-report/yarn.lock @@ -528,6 +528,30 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" +"@oclif/core@>=3.26.0": + version "4.3.3" + resolved "https://registry.yarnpkg.com/@oclif/core/-/core-4.3.3.tgz#a527536b62ef202c58d2b69ce9cd1e64eb3a94b1" + integrity sha512-A0mk4nlVE+r34fl91OdglXVPwhhfzM59IhSxnOigqMkwxFgT8z3i2WlUgzmazzvzSccs2KM4N2HkTS3NEvW96g== + dependencies: + ansi-escapes "^4.3.2" + ansis "^3.17.0" + clean-stack "^3.0.1" + cli-spinners "^2.9.2" + debug "^4.4.0" + ejs "^3.1.10" + get-package-type "^0.1.0" + indent-string "^4.0.0" + is-wsl "^2.2.0" + lilconfig "^3.1.3" + minimatch "^9.0.5" + semver "^7.6.3" + string-width "^4.2.3" + supports-color "^8" + tinyglobby "^0.2.14" + widest-line "^3.1.0" + wordwrap "^1.0.0" + wrap-ansi "^7.0.0" + "@polka/url@^1.0.0-next.24": version "1.0.0-next.29" resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.29.tgz#5a40109a1ab5f84d6fd8fc928b19f367cbe7e7b1" @@ -1370,6 +1394,13 @@ "@typescript-eslint/types" "8.26.1" eslint-visitor-keys "^4.2.0" +"@typescript/vfs@^1.5.0": + version "1.6.1" + resolved "https://registry.yarnpkg.com/@typescript/vfs/-/vfs-1.6.1.tgz#fe7087d5a43715754f7ea9bf6e0b905176c9eebd" + integrity sha512-JwoxboBh7Oz1v38tPbkrZ62ZXNHAk9bJ7c9x0eI5zBfBnBYGhURdbnh7Z4smN/MV48Y5OCcZb58n972UtbazsA== + dependencies: + debug "^4.1.1" + "@vitejs/plugin-react@^4.3.4": version "4.3.4" resolved "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.4.tgz" @@ -1473,12 +1504,19 @@ ajv@^6.12.4: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +ansi-escapes@^4.2.1, ansi-escapes@^4.3.2: + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== -ansi-styles@^4.1.0: +ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== @@ -1490,6 +1528,11 @@ ansi-styles@^5.0.0: resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz" integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== +ansis@^3.17.0: + version "3.17.0" + resolved "https://registry.yarnpkg.com/ansis/-/ansis-3.17.0.tgz#fa8d9c2a93fe7d1177e0c17f9eeb562a58a832d7" + integrity sha512-0qWUglt9JEqLFr3w1I1pbrChn1grhaiAR2ocX1PP/flRmxgtwTzPFFFnfIlD6aMOLQZgSuCRlidD70lvx8yhzg== + anymatch@^1.3.0: version "1.3.2" resolved "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz" @@ -1498,6 +1541,14 @@ anymatch@^1.3.0: micromatch "^2.1.5" normalize-path "^2.0.0" +anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + argparse@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" @@ -1557,6 +1608,11 @@ async-each@^1.0.0: resolved "https://registry.npmjs.org/async-each/-/async-each-1.0.6.tgz" integrity sha512-c646jH1avxr+aVpndVMeAfYw7wAa6idufrlN3LPA4PmKS0QEGp6PIC9nwz0WQkkvBGAMEki3pFdtxaF39J9vvg== +async@^3.2.3: + version "3.2.6" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.6.tgz#1b0728e14929d51b85b449b7f06e27c1145e38ce" + integrity sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA== + atob@^2.1.2: version "2.1.2" resolved "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz" @@ -1575,6 +1631,11 @@ balanced-match@^1.0.0: resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + base@^0.11.1: version "0.11.2" resolved "https://registry.npmjs.org/base/-/base-0.11.2.tgz" @@ -1593,6 +1654,11 @@ binary-extensions@^1.0.0: resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz" integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== +binary-extensions@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" + integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== + bindings@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" @@ -1600,6 +1666,15 @@ bindings@^1.5.0: dependencies: file-uri-to-path "1.0.0" +bl@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" @@ -1640,7 +1715,7 @@ braces@^2.3.1: split-string "^3.0.2" to-regex "^3.0.1" -braces@^3.0.3: +braces@^3.0.3, braces@~3.0.2: version "3.0.3" resolved "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz" integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== @@ -1657,6 +1732,14 @@ browserslist@^4.24.0: node-releases "^2.0.19" update-browserslist-db "^1.1.1" +buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + cac@^6.7.14: version "6.7.14" resolved "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz" @@ -1677,7 +1760,7 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" -callsites@^3.0.0: +callsites@^3.0.0, callsites@^3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== @@ -1687,6 +1770,11 @@ caniuse-lite@^1.0.30001688: resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001706.tgz" integrity sha512-3ZczoTApMAZwPKYWmwVbQMFpXBDds3/0VciVoUwPUbldlYyVLmRVuRs/PcUZtHpbLRpzzDvrvnFuREsGt6lUug== +case@^1.6.3: + version "1.6.3" + resolved "https://registry.yarnpkg.com/case/-/case-1.6.3.tgz#0a4386e3e9825351ca2e6216c60467ff5f1ea1c9" + integrity sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ== + chai@^5.2.0: version "5.2.0" resolved "https://registry.npmjs.org/chai/-/chai-5.2.0.tgz" @@ -1706,7 +1794,7 @@ chalk@^3.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@^4.0.0, chalk@^4.1.0: +chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1: version "4.1.2" resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -1729,6 +1817,11 @@ character-reference-invalid@^1.0.0: resolved "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz" integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg== +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + check-error@^2.1.1: version "2.1.1" resolved "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz" @@ -1750,6 +1843,21 @@ chokidar@^1.6.0: optionalDependencies: fsevents "^1.0.0" +chokidar@^3.5.1: + version "3.6.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" + integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + ci-info@^3.2.0: version "3.9.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" @@ -1772,6 +1880,35 @@ class-variance-authority@^0.7.1: dependencies: clsx "^2.1.1" +clean-stack@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-3.0.1.tgz#155bf0b2221bf5f4fba89528d24c5953f17fe3a8" + integrity sha512-lR9wNiMRcVQjSB3a7xXGLuz4cr4wJuuXlaAEbRutGowQTmlp7R72/DOgN21e8jdwblMWl9UOJMJXarX94pzKdg== + dependencies: + escape-string-regexp "4.0.0" + +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-spinners@^2.5.0, cli-spinners@^2.9.2: + version "2.9.2" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.2.tgz#1773a8f4b9c4d6ac31563df53b3fc1d79462fe41" + integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== + +cli-width@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" + integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== + +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== + clsx@^2.0.0, clsx@^2.1.1: version "2.1.1" resolved "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz" @@ -1953,6 +2090,13 @@ debug@^4.1.0, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.4.0: dependencies: ms "^2.1.3" +debug@^4.1.1, debug@^4.2.0: + version "4.4.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.1.tgz#e5a8bc6cbc4c6cd3e64308b0693a3d4fa550189b" + integrity sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ== + dependencies: + ms "^2.1.3" + decimal.js-light@^2.4.1: version "2.5.1" resolved "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz" @@ -1973,6 +2117,13 @@ deep-is@^0.1.3: resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== +defaults@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" + integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== + dependencies: + clone "^1.0.2" + define-property@^0.2.5: version "0.2.5" resolved "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz" @@ -2033,11 +2184,23 @@ duplexer@^0.1.1: resolved "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz" integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== +ejs@^3.1.10: + version "3.1.10" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.10.tgz#69ab8358b14e896f80cc39e62087b88500c3ac3b" + integrity sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA== + dependencies: + jake "^10.8.5" + electron-to-chromium@^1.5.73: version "1.5.120" resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.120.tgz" integrity sha512-oTUp3gfX1gZI+xfD2djr2rzQdHCwHzPQrrK0CD7WpTdF0nPdQ/INcRVjWgLdCT4a9W3jFObR9DAfsuyFQnI8CQ== +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + enhanced-resolve@^5.18.1: version "5.18.1" resolved "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz" @@ -2087,16 +2250,21 @@ escalade@^3.2.0: resolved "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz" integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== +escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + escape-string-regexp@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== -escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - eslint-plugin-react-hooks@^5.1.0: version "5.2.0" resolved "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz" @@ -2166,6 +2334,11 @@ eslint@^9.21.0: natural-compare "^1.4.0" optionator "^0.9.3" +esm@^3.2.25: + version "3.2.25" + resolved "https://registry.yarnpkg.com/esm/-/esm-3.2.25.tgz#342c18c29d56157688ba5ce31f8431fbb795cc10" + integrity sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA== + espree@^10.0.1, espree@^10.3.0: version "10.3.0" resolved "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz" @@ -2269,6 +2442,15 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2: assign-symbols "^1.0.0" is-extendable "^1.0.1" +external-editor@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + extglob@^0.3.1: version "0.3.2" resolved "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz" @@ -2345,6 +2527,13 @@ fflate@^0.8.2: resolved "https://registry.yarnpkg.com/fflate/-/fflate-0.8.2.tgz#fc8631f5347812ad6028bbe4a2308b2792aa1dea" integrity sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A== +figures@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== + dependencies: + escape-string-regexp "^1.0.5" + file-entry-cache@^8.0.0: version "8.0.0" resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz" @@ -2357,6 +2546,13 @@ file-uri-to-path@1.0.0: resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== +filelist@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" + integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== + dependencies: + minimatch "^5.0.1" + filename-regex@^2.0.0: version "2.0.1" resolved "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz" @@ -2440,6 +2636,15 @@ fragment-cache@^0.2.1: dependencies: map-cache "^0.2.2" +fs-extra@^11.1.1: + version "11.3.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.3.0.tgz#0daced136bbaf65a555a326719af931adc7a314d" + integrity sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" @@ -2468,6 +2673,11 @@ gensync@^1.0.0-beta.2: resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== +get-package-type@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" + integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== + get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" resolved "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz" @@ -2488,7 +2698,7 @@ glob-parent@^2.0.0: dependencies: is-glob "^2.0.0" -glob-parent@^5.1.2: +glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== @@ -2536,7 +2746,7 @@ globals@^15.15.0: resolved "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz" integrity sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg== -graceful-fs@^4.1.11, graceful-fs@^4.2.4, graceful-fs@^4.2.9: +graceful-fs@^4.1.11, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.9: version "4.2.11" resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== @@ -2623,6 +2833,18 @@ highlightjs-vue@^1.0.0: resolved "https://registry.npmjs.org/highlightjs-vue/-/highlightjs-vue-1.0.0.tgz" integrity sha512-PDEfEF102G23vHmPhLyPboFCD+BkMGu+GuJe2d9/eH4FsCwvgBpnc9n0pGE+ffKdph38s6foEZiEjdgHdzp+IA== +iconv-lite@^0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +ieee754@^1.1.13: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + ignore@^5.2.0, ignore@^5.3.1: version "5.3.2" resolved "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz" @@ -2654,11 +2876,32 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.1, inherits@~2.0.3: +inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: version "2.0.4" resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== +inquirer@^8.2.0: + version "8.2.6" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.6.tgz#733b74888195d8d400a67ac332011b5fae5ea562" + integrity sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg== + dependencies: + ansi-escapes "^4.2.1" + chalk "^4.1.1" + cli-cursor "^3.1.0" + cli-width "^3.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.21" + mute-stream "0.0.8" + ora "^5.4.1" + run-async "^2.4.0" + rxjs "^7.5.5" + string-width "^4.1.0" + strip-ansi "^6.0.0" + through "^2.3.6" + wrap-ansi "^6.0.1" + "internmap@1 - 2": version "2.0.3" resolved "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz" @@ -2691,6 +2934,13 @@ is-binary-path@^1.0.0: dependencies: binary-extensions "^1.0.0" +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz" @@ -2731,6 +2981,11 @@ is-descriptor@^1.0.0, is-descriptor@^1.0.2: is-accessor-descriptor "^1.0.1" is-data-descriptor "^1.0.1" +is-docker@^2.0.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + is-dotfile@^1.0.0: version "1.0.3" resolved "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz" @@ -2765,6 +3020,11 @@ is-extglob@^2.1.1: resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + is-glob@^2.0.0, is-glob@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz" @@ -2772,7 +3032,7 @@ is-glob@^2.0.0, is-glob@^2.0.1: dependencies: is-extglob "^1.0.0" -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: version "4.0.3" resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== @@ -2784,6 +3044,11 @@ is-hexadecimal@^1.0.0: resolved "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz" integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw== +is-interactive@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== + is-number@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz" @@ -2808,6 +3073,11 @@ is-number@^7.0.0: resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== +is-observable@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-observable/-/is-observable-2.1.0.tgz#5c8d733a0b201c80dff7bb7c0df58c6a255c7c69" + integrity sha512-DailKdLb0WU+xX8K5w7VsJhapwHLZ9jjmazqCJq4X12CTgqq73TKnbRcnSLuXYPOoLQgV5IrD7ePiX/h1vnkBw== + is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz" @@ -2825,11 +3095,23 @@ is-primitive@^2.0.0: resolved "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz" integrity sha512-N3w1tFaRfk3UrPfqeRyD+GYDASU3W5VinKhlORy8EWVf/sIdDL9GAcew85XmktCfH+ngG7SRXEVDoO18WMdB/Q== +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + is-windows@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz" integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== +is-wsl@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + isarray@1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" @@ -2852,6 +3134,16 @@ isobject@^3.0.0, isobject@^3.0.1: resolved "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz" integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== +jake@^10.8.5: + version "10.9.2" + resolved "https://registry.yarnpkg.com/jake/-/jake-10.9.2.tgz#6ae487e6a69afec3a5e167628996b59f35ae2b7f" + integrity sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA== + dependencies: + async "^3.2.3" + chalk "^4.0.2" + filelist "^1.0.4" + minimatch "^3.1.2" + jest-diff@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.7.0.tgz#017934a66ebb7ecf6f205e84699be10afd70458a" @@ -2961,6 +3253,15 @@ json5@^2.2.3: resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + keyv@^4.5.4: version "4.5.4" resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz" @@ -3063,6 +3364,11 @@ lightningcss@1.29.2: lightningcss-win32-arm64-msvc "1.29.2" lightningcss-win32-x64-msvc "1.29.2" +lilconfig@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.3.tgz#a1bcfd6257f9585bf5ae14ceeebb7b559025e4c4" + integrity sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw== + locate-path@^6.0.0: version "6.0.0" resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" @@ -3080,6 +3386,14 @@ lodash@^4.17.21: resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== +log-symbols@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz" @@ -3192,6 +3506,11 @@ micromatch@^4.0.4, micromatch@^4.0.8: braces "^3.0.3" picomatch "^2.3.1" +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + min-indent@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz" @@ -3204,7 +3523,14 @@ minimatch@^3.0.2, minimatch@^3.1.1, minimatch@^3.1.2: dependencies: brace-expansion "^1.1.7" -minimatch@^9.0.4: +minimatch@^5.0.1: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^9.0.4, minimatch@^9.0.5: version "9.0.5" resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz" integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== @@ -3246,6 +3572,11 @@ ms@^2.1.3: resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== +mute-stream@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + nan@^2.12.1: version "2.22.2" resolved "https://registry.yarnpkg.com/nan/-/nan-2.22.2.tgz#6b504fd029fb8f38c0990e52ad5c26772fdacfbb" @@ -3290,6 +3621,11 @@ normalize-path@^2.0.0, normalize-path@^2.0.1: dependencies: remove-trailing-separator "^1.0.1" +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + object-assign@^4.1.1: version "4.1.1" resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" @@ -3326,6 +3662,11 @@ object.pick@^1.3.0: dependencies: isobject "^3.0.1" +observable-fns@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/observable-fns/-/observable-fns-0.6.1.tgz#636eae4fdd1132e88c0faf38d33658cc79d87e37" + integrity sha512-9gRK4+sRWzeN6AOewNBTLXir7Zl/i3GB6Yl26gK4flxz8BXVpD3kt8amREmWNb0mxYOGDotvE5a4N+PtGGKdkg== + once@^1.3.0: version "1.4.0" resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" @@ -3333,6 +3674,13 @@ once@^1.3.0: dependencies: wrappy "1" +onetime@^5.1.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + optionator@^0.9.3: version "0.9.4" resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz" @@ -3345,6 +3693,26 @@ optionator@^0.9.3: type-check "^0.4.0" word-wrap "^1.2.5" +ora@^5.4.0, ora@^5.4.1: + version "5.4.1" + resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" + integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== + dependencies: + bl "^4.1.0" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-spinners "^2.5.0" + is-interactive "^1.0.0" + is-unicode-supported "^0.1.0" + log-symbols "^4.1.0" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== + p-limit@^3.0.2: version "3.1.0" resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" @@ -3428,7 +3796,7 @@ picocolors@^1.0.0, picocolors@^1.1.1: resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz" integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== -picomatch@^2.2.3, picomatch@^2.3.1: +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== @@ -3462,6 +3830,11 @@ preserve@^0.2.0: resolved "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz" integrity sha512-s/46sYeylUfHNjI+sA/78FAHlmIuKqI9wNnzEOGehAlUUYeObv5C2mOinXBjyUyWmJ2SfcS2/ydApH4hTF4WXQ== +prettier@3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.0.3.tgz#432a51f7ba422d1469096c0fdc28e235db8f9643" + integrity sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg== + prettier@^3.2.5: version "3.5.3" resolved "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz" @@ -3611,6 +3984,15 @@ readable-stream@^2.0.2: string_decoder "~1.1.1" util-deprecate "~1.0.1" +readable-stream@^3.4.0: + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + readdirp@^2.0.0: version "2.2.1" resolved "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz" @@ -3620,6 +4002,13 @@ readdirp@^2.0.0: micromatch "^3.1.10" readable-stream "^2.0.2" +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + recharts-scale@^0.4.4: version "0.4.5" resolved "https://registry.npmjs.org/recharts-scale/-/recharts-scale-0.4.5.tgz" @@ -3717,6 +4106,14 @@ resolve@^1.1.7: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + ret@~0.1.10: version "0.1.15" resolved "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz" @@ -3755,6 +4152,11 @@ rollup@^4.30.1: "@rollup/rollup-win32-x64-msvc" "4.36.0" fsevents "~2.3.2" +run-async@^2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" + integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== + run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" @@ -3762,7 +4164,14 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -safe-buffer@^5.0.1: +rxjs@^7.4.0, rxjs@^7.5.5: + version "7.8.2" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.2.tgz#955bc473ed8af11a002a2be52071bf475638607b" + integrity sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA== + dependencies: + tslib "^2.1.0" + +safe-buffer@^5.0.1, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -3779,6 +4188,11 @@ safe-regex@^1.1.0: dependencies: ret "~0.1.10" +"safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + scheduler@^0.25.0: version "0.25.0" resolved "https://registry.npmjs.org/scheduler/-/scheduler-0.25.0.tgz" @@ -3794,6 +4208,11 @@ semver@^7.6.0: resolved "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz" integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA== +semver@^7.6.3: + version "7.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.2.tgz#67d99fdcd35cec21e6f8b87a7fd515a33f982b58" + integrity sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA== + set-value@^2.0.0, set-value@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz" @@ -3826,6 +4245,11 @@ siginfo@^2.0.0: resolved "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz" integrity sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g== +signal-exit@^3.0.2: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + sirv@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/sirv/-/sirv-3.0.1.tgz#32a844794655b727f9e2867b777e0060fbe07bf3" @@ -3933,6 +4357,22 @@ std-env@^3.9.0: resolved "https://registry.npmjs.org/std-env/-/std-env-3.9.0.tgz" integrity sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw== +string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + string_decoder@~1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" @@ -3940,6 +4380,13 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + strip-indent@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz" @@ -3966,6 +4413,13 @@ supports-color@^7.1.0: dependencies: has-flag "^4.0.0" +supports-color@^8: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" @@ -3991,11 +4445,35 @@ tapable@^2.2.0: resolved "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz" integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== +threads@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/threads/-/threads-1.7.0.tgz#d9e9627bfc1ef22ada3b733c2e7558bbe78e589c" + integrity sha512-Mx5NBSHX3sQYR6iI9VYbgHKBLisyB+xROCBGjjWm1O9wb9vfLxdaGtmT/KCjUqMsSNW6nERzCW3T6H43LqjDZQ== + dependencies: + callsites "^3.1.0" + debug "^4.2.0" + is-observable "^2.1.0" + observable-fns "^0.6.1" + optionalDependencies: + tiny-worker ">= 2" + +through@^2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== + tiny-invariant@^1.3.1: version "1.3.3" resolved "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz" integrity sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg== +"tiny-worker@>= 2": + version "2.3.0" + resolved "https://registry.yarnpkg.com/tiny-worker/-/tiny-worker-2.3.0.tgz#715ae34304c757a9af573ae9a8e3967177e6011e" + integrity sha512-pJ70wq5EAqTAEl9IkGzA+fN0836rycEuz2Cn6yeZ6FRzlVS5IDOkFHpIoEsksPRQV34GDqXm65+OlnZqUSyK2g== + dependencies: + esm "^3.2.25" + tinybench@^2.9.0: version "2.9.0" resolved "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz" @@ -4014,6 +4492,14 @@ tinyglobby@^0.2.13, tinyglobby@^0.2.9: fdir "^6.4.4" picomatch "^4.0.2" +tinyglobby@^0.2.14: + version "0.2.14" + resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.14.tgz#5280b0cf3f972b050e74ae88406c0a6a58f4079d" + integrity sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ== + dependencies: + fdir "^6.4.4" + picomatch "^4.0.2" + tinypool@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/tinypool/-/tinypool-1.0.2.tgz" @@ -4029,6 +4515,13 @@ tinyspy@^3.0.2: resolved "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.2.tgz" integrity sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q== +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + to-object-path@^0.3.0: version "0.3.0" resolved "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz" @@ -4071,6 +4564,45 @@ ts-api-utils@^2.0.1: resolved "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.0.1.tgz" integrity sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w== +ts-to-zod@^3.15.0: + version "3.15.0" + resolved "https://registry.yarnpkg.com/ts-to-zod/-/ts-to-zod-3.15.0.tgz#3784780f2c52e69d5c48199d3e18f83aec5c5109" + integrity sha512-Lu5ITqD8xCIo4JZp4Cg3iSK3J2x3TGwwuDtNHfAIlx1mXWKClRdzqV+x6CFEzhKtJlZzhyvJIqg7DzrWfsdVSg== + dependencies: + "@oclif/core" ">=3.26.0" + "@typescript/vfs" "^1.5.0" + case "^1.6.3" + chokidar "^3.5.1" + fs-extra "^11.1.1" + inquirer "^8.2.0" + lodash "^4.17.21" + ora "^5.4.0" + prettier "3.0.3" + rxjs "^7.4.0" + slash "^3.0.0" + threads "^1.7.0" + tslib "^2.3.1" + tsutils "^3.21.0" + typescript "^5.2.2" + zod "^3.23.8" + +tslib@^1.8.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.1.0, tslib@^2.3.1: + version "2.8.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== + +tsutils@^3.21.0: + version "3.21.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== + dependencies: + tslib "^1.8.1" + type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" @@ -4078,6 +4610,11 @@ type-check@^0.4.0, type-check@~0.4.0: dependencies: prelude-ls "^1.2.1" +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + typescript-eslint@^8.24.1: version "8.26.1" resolved "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.26.1.tgz" @@ -4087,7 +4624,7 @@ typescript-eslint@^8.24.1: "@typescript-eslint/parser" "8.26.1" "@typescript-eslint/utils" "8.26.1" -typescript@^5.8.3: +typescript@^5.2.2, typescript@^5.8.3: version "5.8.3" resolved "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz" integrity sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ== @@ -4112,6 +4649,11 @@ union-value@^1.0.0: is-extendable "^0.1.1" set-value "^2.0.1" +universalify@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" + integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== + unset-value@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz" @@ -4145,7 +4687,7 @@ use@^3.1.0: resolved "https://registry.npmjs.org/use/-/use-3.1.1.tgz" integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== -util-deprecate@~1.0.1: +util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== @@ -4219,6 +4761,13 @@ vitest@^3.1.3: vite-node "3.1.3" why-is-node-running "^2.3.0" +wcwidth@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== + dependencies: + defaults "^1.0.3" + webidl-conversions@^7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz" @@ -4244,11 +4793,41 @@ why-is-node-running@^2.3.0: siginfo "^2.0.0" stackback "0.0.2" +widest-line@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" + integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== + dependencies: + string-width "^4.0.0" + word-wrap@^1.2.5: version "1.2.5" resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz" integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== +wordwrap@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== + +wrap-ansi@^6.0.1: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrappy@1: version "1.0.2" resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" @@ -4268,3 +4847,8 @@ yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +zod@^3.23.8, zod@^3.25.67: + version "3.25.67" + resolved "https://registry.yarnpkg.com/zod/-/zod-3.25.67.tgz#62987e4078e2ab0f63b491ef0c4f33df24236da8" + integrity sha512-idA2YXwpCdqUSKRCACDE6ItZD9TZzy3OZMtpfLoh6oPR47lipysRrJfjzMqFxQ3uJuUPyUeWe1r9vLH33xO/Qw==