diff --git a/examples/uniforms-patternfly/package.json b/examples/uniforms-patternfly/package.json index 77f4acef161..afc29cf9288 100644 --- a/examples/uniforms-patternfly/package.json +++ b/examples/uniforms-patternfly/package.json @@ -14,7 +14,9 @@ "@kie-tools/uniforms-patternfly": "workspace:*", "@patternfly/react-core": "^4.276.6", "@patternfly/react-icons": "^4.93.6", - "ajv": "^6.12.6", + "ajv": "^8.17.1", + "ajv-draft-04": "^1.0.0", + "ajv-formats": "^3.0.1", "react": "^17.0.2", "react-dom": "^17.0.2", "simpl-schema": "^1.12.0", diff --git a/examples/uniforms-patternfly/src/schemas/json-schema.ts b/examples/uniforms-patternfly/src/schemas/json-schema.ts index d2e99e55434..ca8a30c0506 100644 --- a/examples/uniforms-patternfly/src/schemas/json-schema.ts +++ b/examples/uniforms-patternfly/src/schemas/json-schema.ts @@ -17,10 +17,12 @@ * under the License. */ -import * as Ajv from "ajv"; +import AjvDraft04 from "ajv-draft-04"; +import addFormats from "ajv-formats"; import { JSONSchemaBridge } from "uniforms-bridge-json-schema"; -const ajv = new Ajv({ allErrors: true, useDefaults: true }); +const ajv = new AjvDraft04({ strict: false, allErrors: true, useDefaults: true }); +addFormats(ajv); function createValidator(schema: any) { const validator = ajv.compile(schema); @@ -56,7 +58,7 @@ const schema = { type: "string", format: "date-time", max: "2000-04-04T10:30:00.000Z", - description: "this is date and time field", + description: "this is the date and time field", }, }, disabled: false, diff --git a/packages/dashbuilder-component-uniforms/package.json b/packages/dashbuilder-component-uniforms/package.json index 526996a3bfb..14ebad675aa 100644 --- a/packages/dashbuilder-component-uniforms/package.json +++ b/packages/dashbuilder-component-uniforms/package.json @@ -26,7 +26,9 @@ "@kie-tools/uniforms-patternfly": "workspace:*", "@patternfly/react-core": "^4.276.6", "@patternfly/react-table": "^4.112.39", - "ajv": "^6.12.6", + "ajv": "^8.17.1", + "ajv-draft-04": "^1.0.0", + "ajv-formats": "^3.0.1", "lodash": "^4.17.21", "uniforms": "^3.10.2", "uniforms-bridge-json-schema": "^3.10.2" diff --git a/packages/dashbuilder-component-uniforms/src/Uniforms.tsx b/packages/dashbuilder-component-uniforms/src/Uniforms.tsx index 311ccfb730f..ad9a2979985 100644 --- a/packages/dashbuilder-component-uniforms/src/Uniforms.tsx +++ b/packages/dashbuilder-component-uniforms/src/Uniforms.tsx @@ -16,13 +16,16 @@ * specific language governing permissions and limitations * under the License. */ -import { JSONSchemaBridge } from "uniforms-bridge-json-schema"; -import { AutoForm } from "@kie-tools/uniforms-patternfly/dist/esm"; -import * as Ajv from "ajv"; import * as React from "react"; import { useCallback } from "react"; +import { AutoForm } from "@kie-tools/uniforms-patternfly/dist/esm"; +import AjvDraft04 from "ajv-draft-04"; +import addFormats from "ajv-formats"; +import { JSONSchemaBridge } from "uniforms-bridge-json-schema"; + +const ajv = new AjvDraft04({ strict: false, allErrors: true, useDefaults: true }); +addFormats(ajv); -const ajv = new Ajv({ allErrors: true, useDefaults: true }); const createValidator = (schema: any) => { const validator = ajv.compile(schema); return (model: any) => { diff --git a/packages/dmn-runner/package.json b/packages/dmn-runner/package.json index a6a48868501..44b7fdc785a 100644 --- a/packages/dmn-runner/package.json +++ b/packages/dmn-runner/package.json @@ -29,7 +29,9 @@ "@kie-tools/uniforms-patternfly": "workspace:*", "@patternfly/react-core": "^4.276.6", "@patternfly/react-icons": "^4.93.6", - "ajv": "^6.12.6", + "ajv": "^8.17.1", + "ajv-draft-04": "^1.0.0", + "ajv-formats": "^3.0.1", "deep-object-diff": "^1.1.9", "json-refs": "^3.0.15", "lodash": "^4.17.21", diff --git a/packages/dmn-runner/src/ajv.ts b/packages/dmn-runner/src/ajv.ts index 2ba7cecc2d3..0a192b87e9c 100644 --- a/packages/dmn-runner/src/ajv.ts +++ b/packages/dmn-runner/src/ajv.ts @@ -17,9 +17,8 @@ * under the License. */ -import Ajv from "ajv"; -import * as metaSchemaDraft04 from "ajv/lib/refs/json-schema-draft-04.json"; -export { ValidateFunction } from "ajv"; +import AjvDraft04, { AnySchemaObject } from "ajv-draft-04"; +import addFormats from "ajv-formats"; import { duration } from "moment"; import { DATE_AND_TIME_ENUM_REGEXP, @@ -140,7 +139,7 @@ export class DmnRunnerAjv { }; private constraintCompiler() { - return (schema: any, parentSchema: { format?: DmnAjvSchemaFormat }, it: any) => { + return (schema: any, parentSchema: AnySchemaObject) => { if (!parentSchema.format) { return (data: string) => true; } @@ -217,24 +216,25 @@ export class DmnRunnerAjv { } constructor() { - this.ajv = new Ajv({ + this.ajv = new AjvDraft04({ allErrors: true, - schemaId: "auto", useDefaults: true, removeAdditional: "all", verbose: true, }); - this.ajv.addMetaSchema(metaSchemaDraft04); - this.ajv.addKeyword(X_DMN_TYPE_KEYWORD, {}); - this.ajv.addKeyword(X_DMN_ALLOWED_VALUES_KEYWORD, { + addFormats(this.ajv); + this.ajv.addKeyword(X_DMN_TYPE_KEYWORD); + this.ajv.addKeyword({ + keyword: X_DMN_ALLOWED_VALUES_KEYWORD, compile: this.constraintCompiler(), }); - this.ajv.addKeyword(X_DMN_TYPE_CONSTRAINTS_KEYWORD, { + this.ajv.addKeyword({ + keyword: X_DMN_TYPE_CONSTRAINTS_KEYWORD, compile: this.constraintCompiler(), }); - this.ajv.addKeyword(X_DMN_DESCRIPTIONS_KEYWORD, {}); - this.ajv.addKeyword(RECURSION_KEYWORD, {}); - this.ajv.addKeyword(RECURSION_REF_KEYWORD, {}); + this.ajv.addKeyword(X_DMN_DESCRIPTIONS_KEYWORD); + this.ajv.addKeyword(RECURSION_KEYWORD); + this.ajv.addKeyword(RECURSION_REF_KEYWORD); this.ajv.addFormat(DAYS_AND_TIME_DURATION_FORMAT, { type: "string", validate: (data: string) => !!data.match(DAYS_AND_TIME_DURATION_REGEXP), @@ -246,7 +246,7 @@ export class DmnRunnerAjv { }); } - public getAjv(): Ajv.Ajv { + public getAjv(): AjvDraft04 { return this.ajv; } } diff --git a/packages/dmn-runner/src/jsonSchema.ts b/packages/dmn-runner/src/jsonSchema.ts index be94d9f62be..b895edb9f8b 100644 --- a/packages/dmn-runner/src/jsonSchema.ts +++ b/packages/dmn-runner/src/jsonSchema.ts @@ -18,7 +18,8 @@ */ import { JSON_SCHEMA_INPUT_SET_PATH, RECURSION_KEYWORD, RECURSION_REF_KEYWORD } from "./jsonSchemaConstants"; -import { DmnAjvSchemaFormat, ValidateFunction } from "./ajv"; +import { DmnAjvSchemaFormat } from "./ajv"; +import { ValidateFunction } from "ajv-draft-04"; import { ExtendedServicesFormSchema, DmnInputFieldProperties } from "@kie-tools/extended-services-api/dist/formSchema"; import { Holder } from "@kie-tools-core/react-hooks/dist/Holder"; import { resolveRefs, pathFromPtr } from "json-refs"; @@ -87,7 +88,7 @@ export function removeChangedPropertiesAndAdditionalProperties { const validate = validator.createValidator(schema); const errors = validate(model); expect(errors?.details[0].keyword).toEqual("minimum"); - expect(errors?.details[0].message).toEqual("should be >= 1"); + expect(errors?.details[0].message).toEqual("must be >= 1"); }); it("invalid model - format", () => { @@ -82,7 +82,7 @@ describe("Validator Tests", () => { const validate = validator.createValidator(schema); const errors = validate(model); expect(errors?.details[0].keyword).toEqual("format"); - expect(errors?.details[0].message).toEqual(`should match format "date-time"`); + expect(errors?.details[0].message).toEqual(`must match format "date-time"`); }); }); diff --git a/packages/runtime-tools-components/package.json b/packages/runtime-tools-components/package.json index 359515151f0..76f825ade03 100644 --- a/packages/runtime-tools-components/package.json +++ b/packages/runtime-tools-components/package.json @@ -34,7 +34,8 @@ "@patternfly/react-icons": "^4.93.6", "@patternfly/react-styles": "^4.92.6", "@patternfly/react-table": "^4.112.39", - "ajv": "^6.12.6", + "ajv": "^8.17.1", + "ajv-formats": "^3.0.1", "axios": "^1.7.4", "copyfiles": "^2.4.1", "history": "^4.9.0", diff --git a/packages/runtime-tools-components/src/common/utils/FormValidator.ts b/packages/runtime-tools-components/src/common/utils/FormValidator.ts index 99cc8641a4c..81ac5648dba 100644 --- a/packages/runtime-tools-components/src/common/utils/FormValidator.ts +++ b/packages/runtime-tools-components/src/common/utils/FormValidator.ts @@ -19,6 +19,7 @@ import { SCHEMA_VERSION } from "@kie-tools/runtime-tools-shared-gateway-api/dist/types"; import Ajv, { ValidateFunction } from "ajv"; +import addFormats from "ajv-formats"; /** * Defines a basic Form Validator @@ -59,11 +60,13 @@ export function lookupValidator(schema: any): FormValidator { export class Draft7FormValidator implements FormValidator { readonly schema: any; readonly validator: ValidateFunction; + readonly ajv: Ajv; constructor(schema: any) { this.schema = schema; - - this.validator = new Ajv({ allErrors: true, useDefaults: true }).compile(schema); + this.ajv = new Ajv({ strict: false, allErrors: true, useDefaults: true }); + addFormats(this.ajv); + this.validator = this.ajv.compile(schema); } validate(model: any): any | undefined { diff --git a/packages/runtime-tools-process-dev-ui-webapp/package.json b/packages/runtime-tools-process-dev-ui-webapp/package.json index 88bb5429365..2ea9b30646f 100644 --- a/packages/runtime-tools-process-dev-ui-webapp/package.json +++ b/packages/runtime-tools-process-dev-ui-webapp/package.json @@ -90,6 +90,7 @@ "file-loader": "^6.2.0", "filemanager-webpack-plugin": "^7.0.0", "graphql": "14.3.1", + "html-replace-webpack-plugin": "^2.6.0", "html-webpack-plugin": "^5.3.2", "https-browserify": "^1.0.0", "identity-obj-proxy": "^3.0.0", diff --git a/packages/runtime-tools-process-dev-ui-webapp/resources/index.html b/packages/runtime-tools-process-dev-ui-webapp/resources/index.html index 3758c0ab286..362db9c6605 100644 --- a/packages/runtime-tools-process-dev-ui-webapp/resources/index.html +++ b/packages/runtime-tools-process-dev-ui-webapp/resources/index.html @@ -49,8 +49,10 @@ { id: "saravana", groups: [] }, { id: "john", groups: [] }, ], + quarkusAppOrigin: "http://${WEBPACK_REPLACEMENT_WEBAPP_HOST}:${WEBPACK_REPLACEMENT_WEBAPP_PORT}", + quarkusAppRootPath: "", page: "Processes", - devUIUrl: "http://localhost:9027", + devUIUrl: "http://${WEBPACK_REPLACEMENT_WEBAPP_HOST}:${WEBPACK_REPLACEMENT_WEBAPP_PORT}", customLabels: { singularProcessLabel: "Process", pluralProcessLabel: "Process", diff --git a/packages/runtime-tools-process-dev-ui-webapp/server/MockData/controllers.js b/packages/runtime-tools-process-dev-ui-webapp/server/MockData/controllers.js index f83124f4564..5df1d04cb90 100644 --- a/packages/runtime-tools-process-dev-ui-webapp/server/MockData/controllers.js +++ b/packages/runtime-tools-process-dev-ui-webapp/server/MockData/controllers.js @@ -29,7 +29,7 @@ const emptyForm = require("./forms/EmptyForm"); const formData = require("../MockData/forms/formData"); const customDashboardData = require("../MockData/customDashboard/data"); const hiringSchema = require("./process-forms-schema/hiring"); -const uuidv4 = require("uuid"); +const { v4: uuid } = require("uuid"); const tasksUnableToTransition = [ "047ec38d-5d57-4330-8c8d-9bd67b53a529", "841b9dba-3d91-4725-9de3-f9f4853b417e", @@ -399,8 +399,11 @@ module.exports = controller = { }, startProcessInstance: (req, res) => { + console.log( + `......Starting Process Instance:: id: ${req.headers["ce-id"]} type: ${req.headers["ce-type"]} source: ${req.headers["ce-source"]}` + ); const businessKey = req.query.businessKey ? req.query.businessKey : null; - const processId = uuidv4(); + const processId = uuid(); const processInstance = { id: processId, processId: "hiring", diff --git a/packages/runtime-tools-process-dev-ui-webapp/server/MockData/forms/examples/hiring.config b/packages/runtime-tools-process-dev-ui-webapp/server/MockData/forms/examples/hiring.config new file mode 100644 index 00000000000..562befafd9a --- /dev/null +++ b/packages/runtime-tools-process-dev-ui-webapp/server/MockData/forms/examples/hiring.config @@ -0,0 +1,7 @@ +{ + "resources": { + "styles": {}, + "scripts": {} + }, + "schema": "{\"$schema\":\"https://json-schema.org/draft/2019-09/schema\",\"$defs\":{\"CandidateData\":{\"type\":\"object\",\"properties\":{\"email\":{\"type\":\"string\"},\"experience\":{\"type\":\"integer\"},\"lastName\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"skills\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}}}}},\"type\":\"object\",\"properties\":{\"candidateData\":{\"$ref\":\"#/$defs/CandidateData\"}}}" +} \ No newline at end of file diff --git a/packages/runtime-tools-process-dev-ui-webapp/server/MockData/forms/examples/hiring.tsx b/packages/runtime-tools-process-dev-ui-webapp/server/MockData/forms/examples/hiring.tsx new file mode 100644 index 00000000000..8d7504ec37a --- /dev/null +++ b/packages/runtime-tools-process-dev-ui-webapp/server/MockData/forms/examples/hiring.tsx @@ -0,0 +1,154 @@ +import React, { useCallback, useEffect, useState } from "react"; +import { Card, CardBody, TextInput, FormGroup, Alert } from "@patternfly/react-core"; +const Form__hiring: React.FC = (props: any) => { + const [formApi, setFormApi] = useState(); + const [candidateData__email, set__candidateData__email] = useState(""); + const [candidateData__experience, set__candidateData__experience] = useState(); + const [candidateData__lastName, set__candidateData__lastName] = useState(""); + const [candidateData__name, set__candidateData__name] = useState(""); + const [candidateData__skills, set__candidateData__skills] = useState(); + + const [candidateData__email__validation, setCandidateData__email__validation] = useState(""); + /* Utility function that fills the form with the data received from the kogito runtime */ + const setFormData = (data) => { + if (!data) { + return; + } + set__candidateData__email(data?.candidateData?.email ?? ""); + set__candidateData__experience(data?.candidateData?.experience); + set__candidateData__lastName(data?.candidateData?.lastName ?? ""); + set__candidateData__name(data?.candidateData?.name ?? ""); + set__candidateData__skills(data?.candidateData?.skills); + }; + /* Utility function to generate the expected form output as a json object */ + const getFormData = useCallback(() => { + const formData: any = {}; + formData.candidateData = {}; + formData.candidateData.email = candidateData__email; + formData.candidateData.experience = candidateData__experience; + formData.candidateData.lastName = candidateData__lastName; + formData.candidateData.name = candidateData__name; + formData.candidateData.skills = candidateData__skills; + return formData; + }, [ + candidateData__email, + candidateData__experience, + candidateData__lastName, + candidateData__name, + candidateData__skills, + ]); + /* Utility function to validate the form on the 'beforeSubmit' Lifecycle Hook */ + const validateForm = useCallback(() => { + if (candidateData__email.includes("@") === false) { + setCandidateData__email__validation("It's not an email!"); + throw new Error("It's not an email!"); + } + }, [candidateData__email]); + /* Utility function to perform actions on the on the 'afterSubmit' Lifecycle Hook */ + const afterSubmit = useCallback((result) => {}, []); + useEffect(() => { + if (formApi) { + /* + Form Lifecycle Hook that will be executed before the form is submitted. + Throwing an error will stop the form submit. Usually should be used to validate the form. + */ + formApi.beforeSubmit = () => validateForm(); + /* + Form Lifecycle Hook that will be executed after the form is submitted. + It will receive a response object containing the `type` flag indicating if the submit has been successful and `info` with extra information about the submit result. + */ + formApi.afterSubmit = (result) => afterSubmit(result); + /* Generates the expected form output object to be posted */ + formApi.getFormData = () => getFormData(); + } + }, [getFormData, validateForm, afterSubmit]); + useEffect(() => { + /* + Call to the Kogito console form engine. It will establish the connection with the console embeding the form + and return an instance of FormAPI that will allow hook custom code into the form lifecycle. + The `window.Form.openForm` call expects an object with the following entries: + - onOpen: Callback that will be called after the connection with the console is established. The callback + will receive the following arguments: + - data: the data to be bound into the form + - ctx: info about the context where the form is being displayed. This will contain information such as the form JSON Schema, process/task, user... + */ + const api = window.Form.openForm({ + onOpen: (data, context) => { + setFormData(data); + }, + }); + setFormApi(api); + }, []); + return ( +
+ + + + + + + + set__candidateData__experience(Number(newValue))} + /> + + + + + + + + + + Cannot find form control for property candidateData.skills with type Array: +
+ Some complex property types, such as Array<object> aren't yet supported, however, you + can still write your own component into the form and use the already existing states{" "} + const [ candidateData__skills, set__candidateData__skills ]. +
+
+
+
+
+ ); +}; +export default Form__hiring; diff --git a/packages/runtime-tools-process-dev-ui-webapp/server/MockData/forms/formData.js b/packages/runtime-tools-process-dev-ui-webapp/server/MockData/forms/formData.js index 5fd2704b123..7420e713ea3 100644 --- a/packages/runtime-tools-process-dev-ui-webapp/server/MockData/forms/formData.js +++ b/packages/runtime-tools-process-dev-ui-webapp/server/MockData/forms/formData.js @@ -37,4 +37,9 @@ module.exports = [ type: "TSX", lastModified: new Date("2021-08-23T13:26:02.13Z"), }, + { + name: "hiring", + type: "TSX", + lastModified: new Date("2021-08-23T13:26:02.13Z"), + }, ]; diff --git a/packages/runtime-tools-process-dev-ui-webapp/server/MockData/graphql.js b/packages/runtime-tools-process-dev-ui-webapp/server/MockData/graphql.js index e7464d30bb4..06e3250b86d 100644 --- a/packages/runtime-tools-process-dev-ui-webapp/server/MockData/graphql.js +++ b/packages/runtime-tools-process-dev-ui-webapp/server/MockData/graphql.js @@ -1731,7 +1731,6 @@ module.exports = { state: "ACTIVE", serviceUrl: "http://localhost:4000", rootProcessInstanceId: null, - serviceUrl: "http://localhost:4000", endpoint: "http://localhost:4000/", addons: ["process-management"], error: { @@ -3150,6 +3149,141 @@ module.exports = { ], }, ], + ProcessDefinitionData: [ + { + id: "hiring", + endpoint: "http://localhost:4000/hiring", + serviceUrl: "http://localhost:4000", + __typename: "ProcessDefinition", + nodes: [ + { + nodeId: "1", + name: "End Event 1", + definitionId: "EndEvent_1", + id: "870bdda0-be04-4e59-bb0b-f9b665eaacc9", + enter: "2019-10-22T03:37:38.586Z", + exit: "2019-10-22T03:37:38.586Z", + type: "EndNode", + }, + { + nodeId: "2", + name: "Confirm travel", + definitionId: "UserTask_2", + id: "6b4a4fe9-4aab-4e8c-bb79-27b8b6b88d1f", + enter: "2019-10-22T03:37:30.807Z", + exit: "2019-10-22T03:37:38.586Z", + type: "HumanTaskNode", + }, + { + nodeId: "3", + name: "Book Hotel", + definitionId: "CallActivity_1", + id: "dd33de7c-c39c-484a-83a8-3e1b007fce95", + enter: "2019-10-22T03:37:30.793Z", + exit: "2019-10-22T03:37:30.803Z", + type: "SubProcessNode", + }, + { + nodeId: "4", + name: "Join", + definitionId: "_2140F05A-364F-40B3-BB7B-B12927065DF8", + id: "08c153e8-2766-4675-81f7-29943efdf411", + enter: "2019-10-22T03:37:30.806Z", + exit: "2019-10-22T03:37:30.807Z", + type: "Join", + }, + { + nodeId: "4", + name: "Book Flight", + definitionId: "CallActivity_2", + id: "683cf307-f082-4a8e-9c85-d5a11b13903a", + enter: "2019-10-22T03:37:30.803Z", + exit: "2019-10-22T03:37:30.806Z", + type: "SubProcessNode", + }, + { + nodeId: "5", + name: "Book", + definitionId: "ParallelGateway_1", + id: "cf057e58-4113-46c0-be13-6de42ea8377e", + enter: "2019-10-22T03:37:30.792Z", + exit: "2019-10-22T03:37:30.803Z", + type: "Split", + }, + { + nodeId: "6", + name: "Join", + definitionId: "ExclusiveGateway_2", + id: "415a52c0-dc1f-4a93-9238-862dc8072262", + enter: "2019-10-22T03:37:30.792Z", + exit: "2019-10-22T03:37:30.792Z", + type: "Join", + }, + { + nodeId: "7", + name: "is visa required", + definitionId: "ExclusiveGateway_1", + id: "52d64298-3f28-4aba-a812-dba4077c9665", + enter: "2019-10-22T03:37:30.79Z", + exit: "2019-10-22T03:37:30.792Z", + type: "Split", + }, + { + nodeId: "8", + name: "Visa check", + definitionId: "BusinessRuleTask_1", + id: "6fdee287-08f6-49c2-af2d-2d125ba76ab7", + enter: "2019-10-22T03:37:30.755Z", + exit: "2019-10-22T03:37:30.79Z", + type: "RuleSetNode", + }, + { + nodeId: "9", + name: "StartProcess", + definitionId: "StartEvent_1", + id: "d98c1762-9d3c-4228-9ffc-bc3f423079c0", + enter: "2019-10-22T03:37:30.753Z", + exit: "2019-10-22T03:37:30.754Z", + type: "StartNode", + }, + ], + }, + { + id: "travels", + endpoint: "http://localhost:4000/travels", + serviceUrl: "http://localhost:4000", + __typename: "ProcessDefinition", + nodes: [ + { + nodeId: "1", + name: "End Event 1", + definitionId: "EndEvent_1", + id: "ed36cd72-5e52-4a53-9d0d-865c98781282", + enter: "2019-10-22T03:40:44.088Z", + exit: "2019-10-22T03:40:44.088Z", + type: "EndNode", + }, + { + nodeId: "2", + name: "Book hotel", + definitionId: "ServiceTask_1", + id: "040cd02a-7f4c-4d41-bda5-4889f82e921f", + enter: "2019-10-22T03:40:44.088Z", + exit: "2019-10-22T03:40:44.088Z", + type: "WorkItemNode", + }, + { + nodeId: "3", + name: "StartProcess", + definitionId: "StartEvent_1", + id: "8528c7bf-8ac8-401f-b7e5-6f3e69b9f9f2", + enter: "2019-10-22T03:40:44.088Z", + exit: "2019-10-22T03:40:44.088Z", + type: "StartNode", + }, + ], + }, + ], JobsData: [ { id: "6e74a570-31c8-4020-bd70-19be2cb625f3_0", diff --git a/packages/runtime-tools-process-dev-ui-webapp/server/MockData/types.js b/packages/runtime-tools-process-dev-ui-webapp/server/MockData/types.js index fe8ab99df53..164fd8a3eed 100644 --- a/packages/runtime-tools-process-dev-ui-webapp/server/MockData/types.js +++ b/packages/runtime-tools-process-dev-ui-webapp/server/MockData/types.js @@ -43,6 +43,7 @@ module.exports = typeDefs = gql` orderBy: ProcessInstanceOrderBy pagination: Pagination ): [ProcessInstance] + ProcessDefinitions(where: ProcessDefinitionArgument): [ProcessDefinition] UserTaskInstances( where: UserTaskInstanceArgument orderBy: UserTaskInstanceOrderBy @@ -84,6 +85,34 @@ module.exports = typeDefs = gql` diagram: String } + type ProcessDefinition { + id: String! + endpoint: String! + serviceUrl: String + nodes: [NodeInstance!] + } + + input ProcessDefinitionArgument { + and: [ProcessDefinitionArgument!] + or: [ProcessDefinitionArgument!] + id: IdArgument + processId: StringArgument + processName: StringArgument + parentProcessInstanceId: IdArgument + rootProcessInstanceId: IdArgument + rootProcessId: StringArgument + state: ProcessInstanceStateArgument + error: ProcessInstanceErrorArgument + nodes: NodeInstanceArgument + endpoint: StringArgument + roles: StringArrayArgument + start: DateArgument + end: DateArgument + addons: StringArrayArgument + lastUpdate: DateArgument + businessKey: StringArgument + } + type KogitoMetadata { lastUpdate: DateTime! processInstances: [ProcessInstanceMeta] diff --git a/packages/runtime-tools-process-dev-ui-webapp/server/server.js b/packages/runtime-tools-process-dev-ui-webapp/server/server.js index e7eb6301723..acdf370be6a 100644 --- a/packages/runtime-tools-process-dev-ui-webapp/server/server.js +++ b/packages/runtime-tools-process-dev-ui-webapp/server/server.js @@ -22,7 +22,7 @@ const swaggerUi = require("swagger-ui-express"); const swaggerApiDoc = require("./MockData/openAPI/openapi.json"); var cors = require("cors"); const app = express(); -const { ApolloServer, gql } = require("apollo-server-express"); +const { ApolloServer } = require("apollo-server-express"); var bodyParser = require("body-parser"); // GraphQL - Apollo const { GraphQLScalarType } = require("graphql"); @@ -406,6 +406,16 @@ const resolvers = { console.log("result length: " + result.length); return result; }, + ProcessDefinitions: async (parent, args) => { + await timeout(); + return data.ProcessDefinitionData.filter((proccessDefinition) => { + if (args["where"] !== undefined) { + return proccessDefinition.id === args["where"].id.equal; + } else { + return proccessDefinition; + } + }); + }, Jobs: async (parent, args) => { if (Object.keys(args).length > 0) { const result = data.JobsData.filter((jobData) => { @@ -515,7 +525,7 @@ const resolvers = { serialize(value) { return value; }, - parseLiteral(ast) { + parseLiteral() { return null; }, }), diff --git a/packages/runtime-tools-process-dev-ui-webapp/webpack.config.js b/packages/runtime-tools-process-dev-ui-webapp/webpack.config.js index 63b8e84bf8d..62e07c79c02 100644 --- a/packages/runtime-tools-process-dev-ui-webapp/webpack.config.js +++ b/packages/runtime-tools-process-dev-ui-webapp/webpack.config.js @@ -27,6 +27,8 @@ const MonacoWebpackPlugin = require("monaco-editor-webpack-plugin"); const NodePolyfillPlugin = require("node-polyfill-webpack-plugin"); const { merge } = require("webpack-merge"); const common = require("@kie-tools-core/webpack-base/webpack.common.config"); +const HtmlReplaceWebpackPlugin = require("html-replace-webpack-plugin"); + const { env: buildEnv } = require("./env"); module.exports = async (env) => { @@ -94,6 +96,16 @@ module.exports = async (env) => { favicon: "src/favicon.ico", chunks: ["app"], }), + new HtmlReplaceWebpackPlugin([ + { + pattern: /\${WEBPACK_REPLACEMENT_WEBAPP_HOST}/g, + replacement: () => buildEnv.runtimeToolsProcessDevUIWebapp.host ?? "", + }, + { + pattern: /\${WEBPACK_REPLACEMENT_WEBAPP_PORT}/g, + replacement: () => buildEnv.runtimeToolsProcessDevUIWebapp.port ?? "", + }, + ]), ], module: { rules: [ diff --git a/packages/runtime-tools-process-gateway-api/src/gatewayApi/apis.tsx b/packages/runtime-tools-process-gateway-api/src/gatewayApi/apis.tsx index c68ce8d3778..cd01d939ad1 100644 --- a/packages/runtime-tools-process-gateway-api/src/gatewayApi/apis.tsx +++ b/packages/runtime-tools-process-gateway-api/src/gatewayApi/apis.tsx @@ -521,7 +521,7 @@ export const getProcessDefinitions = (client: ApolloClient): Promise { resolve( - value.data.ProcessDefinitions.map((item: { id: string; endpoint: string }) => { + (value.data.ProcessDefinitions ?? []).map((item: { id: string; endpoint: string }) => { return { processName: item.id, endpoint: item.endpoint, diff --git a/packages/runtime-tools-shared-enveloped-components/src/formDisplayer/utils/utils.tsx b/packages/runtime-tools-shared-enveloped-components/src/formDisplayer/utils/utils.tsx index 6b4141fe7a6..f3e63b9c148 100644 --- a/packages/runtime-tools-shared-enveloped-components/src/formDisplayer/utils/utils.tsx +++ b/packages/runtime-tools-shared-enveloped-components/src/formDisplayer/utils/utils.tsx @@ -37,7 +37,7 @@ export const sourceHandler = ( const patternflyElements = reg.exec(patternflyImport[0])?.[1]; const trimmedSource = source.split(reactReg).join("").trim().split(patternflyReg).join("").trim(); - const formName = trimmedSource.split(":")[0].split("const ")[1]; + const formName = trimmedSource.split(": React.FC")[0].split("const ")[1]; return { reactElements: reactElements!, patternflyElements: patternflyElements!, formName, trimmedSource }; }; diff --git a/packages/runtime-tools-task-console-webapp/package.json b/packages/runtime-tools-task-console-webapp/package.json index 3b020331865..6e27fbaa9f9 100644 --- a/packages/runtime-tools-task-console-webapp/package.json +++ b/packages/runtime-tools-task-console-webapp/package.json @@ -71,6 +71,7 @@ "apollo-server-express": "^3.13.0", "concurrently": "^8.2.2", "copy-webpack-plugin": "^11.0.0", + "cors": "^2.8.5", "css-loader": "^5.2.6", "css-minimizer-webpack-plugin": "^5.0.1", "express": "^4.21.0", diff --git a/packages/uniforms-patternfly/src/DateField.tsx b/packages/uniforms-patternfly/src/DateField.tsx index 709a6989eb1..7de8ffdabdd 100644 --- a/packages/uniforms-patternfly/src/DateField.tsx +++ b/packages/uniforms-patternfly/src/DateField.tsx @@ -70,12 +70,12 @@ const dateParse = (value: string, onChange: DateFieldProps["onChange"]) => { function DateField({ onChange, ...props }: DateFieldProps) { const isInvalid = useMemo(() => { - if (!props.value) { + if (props.value === undefined) { return false; } if (props.min) { - const minDate = new Date(props.min); + const minDate = new DateConstructor(props.min); if (minDate.toString() === "Invalid Date") { return false; } else if (props.value < minDate) { @@ -83,7 +83,7 @@ function DateField({ onChange, ...props }: DateFieldProps) { } } if (props.max) { - const maxDate = new Date(props.max); + const maxDate = new DateConstructor(props.max); if (maxDate.toString() === "Invalid Date") { return false; } else if (props.value > maxDate) { diff --git a/packages/uniforms-patternfly/tests/DateField.test.tsx b/packages/uniforms-patternfly/tests/DateField.test.tsx index a3b455b5b04..8743c955cad 100644 --- a/packages/uniforms-patternfly/tests/DateField.test.tsx +++ b/packages/uniforms-patternfly/tests/DateField.test.tsx @@ -89,7 +89,6 @@ test(" - renders a input with correct value (model)", () => { test(" - renders a input which correctly reacts on change", () => { const onChange = jest.fn(); - const now = "2000-04-04"; render(usingUniformsContext(, { x: { type: Date } }, { onChange })); const input = screen.getByTestId("date-field") as HTMLInputElement; @@ -100,9 +99,14 @@ test(" - renders a input which correctly reacts on change", () => { test(" - renders a input which correctly reacts on change (empty value)", () => { const onChange = jest.fn(); - const dateValue = new Date("2000-04-04"); - render(usingUniformsContext(, { x: { type: Date } }, { onChange })); + render( + usingUniformsContext( + , + { x: { type: Date } }, + { onChange } + ) + ); const input = screen.getByTestId("date-field") as HTMLInputElement; fireEvent.change(input, { target: { value: "" } }); @@ -124,11 +128,10 @@ test(" - renders a input which correctly reacts on change (empty)", ( test(" - renders a input which correctly reacts on change (invalid)", () => { const onChange = jest.fn(); - const now = "10:00"; render(usingUniformsContext(, { x: { type: Date } }, { onChange })); const input = screen.getByTestId("date-field") as HTMLInputElement; - fireEvent.change(input, { target: { value: now } }); + fireEvent.change(input, { target: { value: "10:00" } }); expect(onChange).not.toHaveBeenCalled(); }); @@ -136,16 +139,18 @@ test(" - renders a input which correctly reacts on change (invalid)", test(" - renders a input which correctly reacts on change (valid)", () => { const onChange = jest.fn(); - const date = "2000-04-04"; - const time = "10:30"; - - const dateValue = new Date(`${date}T00:00:00Z`); - render(usingUniformsContext(, { x: { type: Date } }, { onChange })); + render( + usingUniformsContext( + , + { x: { type: Date } }, + { onChange } + ) + ); const input = screen.getByTestId("date-field") as HTMLInputElement; - fireEvent.change(input, { target: { value: `${date}T${time}` } }); + fireEvent.change(input, { target: { value: "2000-04-04T10:30" } }); - expect(onChange).toHaveBeenLastCalledWith("x", new Date(`${date}T${time}:00.000Z`)); + expect(onChange).toHaveBeenLastCalledWith("x", new Date("2000-04-04T10:30:00.000Z")); }); test(" - renders a input which correctly reacts on change (year bigger than 9999)", () => { @@ -160,39 +165,53 @@ test(" - renders a input which correctly reacts on change (year bigge }); test(" - test max property - valid", () => { - const dateValue = new Date("1998-12-31"); - const maxValue = new Date("1999-01-01T00:00:00Z"); - render(usingUniformsContext(, { x: { type: Date } })); + render( + usingUniformsContext( + , + { + x: { type: Date }, + } + ) + ); expect(screen.queryByTestId("Should be before")).toBeNull(); }); test(" - test max property - invalid", () => { - const date = "1999-01-02"; - const max = "1999-01-01T00:00:00.000Z"; - - const dateValue = new Date(date); - const maxValue = new Date(max); - render(usingUniformsContext(, { x: { type: Date } })); + render( + usingUniformsContext( + , + { + x: { type: Date }, + } + ) + ); - expect(screen.getByText(`Should be before ${max}`)).toBeInTheDocument(); + expect(screen.getByText(`Should be before 1999-01-01T00:00:00.000Z`)).toBeInTheDocument(); }); test(" - test min property - valid", () => { - const dateValue = new Date("1999-01-02"); - const minValue = new Date("1999-01-01T00:00:00Z"); - render(usingUniformsContext(, { x: { type: Date } })); + render( + usingUniformsContext( + , + { + x: { type: Date }, + } + ) + ); expect(screen.queryByTestId("Should be after")).toBeNull(); }); test(" - test min property - invalid", () => { - const date = "1998-12-31"; - const min = "1999-01-01T00:00:00.000Z"; - - const dateValue = new Date(date); - const minValue = new Date(min); - render(usingUniformsContext(, { x: { type: Date } })); - - expect(screen.getByText(`Should be after ${min}`)).toBeInTheDocument(); + render( + usingUniformsContext( + , + { + x: { type: Date }, + } + ) + ); + + expect(screen.getByText(`Should be after 1999-01-01T00:00:00.000Z`)).toBeInTheDocument(); }); diff --git a/packages/unitables/package.json b/packages/unitables/package.json index 37a8dec047f..28c40e8ae6e 100644 --- a/packages/unitables/package.json +++ b/packages/unitables/package.json @@ -37,8 +37,10 @@ "@patternfly/react-icons": "^4.93.6", "@types/lodash": "^4.14.168", "@types/react-table": "^7.0.25", - "ajv": "^6.12.6", + "ajv": "^8.17.1", + "ajv-draft-04": "^1.0.0", "ajv-errors": "^1.0.1", + "ajv-formats": "^3.0.1", "deep-object-diff": "^1.1.9", "lodash": "^4.17.21", "moment": "^2.29.4", diff --git a/packages/unitables/src/UnitablesValidator.ts b/packages/unitables/src/UnitablesValidator.ts index d36a4e5d259..ecc892d864c 100644 --- a/packages/unitables/src/UnitablesValidator.ts +++ b/packages/unitables/src/UnitablesValidator.ts @@ -17,14 +17,18 @@ * under the License. */ -import Ajv from "ajv"; +import AjvDraft04 from "ajv-draft-04"; +import addFormats from "ajv-formats"; import { UnitablesJsonSchemaBridge } from "./uniforms"; import { UnitablesI18n } from "./i18n"; export class UnitablesValidator { - constructor(public i18n: UnitablesI18n) {} + protected readonly ajv: AjvDraft04; - protected readonly ajv = new Ajv({ allErrors: true, schemaId: "auto", useDefaults: true }); + constructor(public i18n: UnitablesI18n) { + this.ajv = new AjvDraft04({ allErrors: true, useDefaults: true }); + addFormats(this.ajv); + } public createValidator(formSchema: object) { const validator = this.ajv.compile(formSchema); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 17ce344b215..b28ce996939 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -599,8 +599,14 @@ importers: specifier: ^4.93.6 version: 4.93.6(react-dom@17.0.2(react@17.0.2))(react@17.0.2) ajv: - specifier: ^6.12.6 - version: 6.12.6 + specifier: ^8.17.1 + version: 8.17.1 + ajv-draft-04: + specifier: ^1.0.0 + version: 1.0.0(ajv@8.17.1) + ajv-formats: + specifier: ^3.0.1 + version: 3.0.1(ajv@8.17.1) react: specifier: ^17.0.2 version: 17.0.2 @@ -855,13 +861,13 @@ importers: version: 1.67.0 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.14.2)(node-notifier@8.0.2)(ts-node@10.9.2(@types/node@20.14.2)(typescript@5.5.3)) + version: 29.7.0(@types/node@22.5.2)(node-notifier@8.0.2)(ts-node@10.9.2(@types/node@22.5.2)(typescript@5.5.3)) jest-junit: specifier: ^16.0.0 version: 16.0.0 jest-when: specifier: ^3.6.0 - version: 3.6.0(jest@29.7.0(@types/node@20.14.2)(node-notifier@8.0.2)(ts-node@10.9.2(@types/node@20.14.2)(typescript@5.5.3))) + version: 3.6.0(jest@29.7.0(@types/node@22.5.2)(node-notifier@8.0.2)(ts-node@10.9.2(@types/node@22.5.2)(typescript@5.5.3))) rimraf: specifier: ^3.0.2 version: 3.0.2 @@ -870,7 +876,7 @@ importers: version: 0.0.2 ts-jest: specifier: ^29.1.5 - version: 29.1.5(@babel/core@7.16.12)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.16.12))(jest@29.7.0(@types/node@20.14.2)(node-notifier@8.0.2)(ts-node@10.9.2(@types/node@20.14.2)(typescript@5.5.3)))(typescript@5.5.3) + version: 29.1.5(@babel/core@7.16.12)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.16.12))(jest@29.7.0(@types/node@22.5.2)(node-notifier@8.0.2)(ts-node@10.9.2(@types/node@22.5.2)(typescript@5.5.3)))(typescript@5.5.3) typescript: specifier: ^5.5.3 version: 5.5.3 @@ -2337,8 +2343,14 @@ importers: specifier: ^4.112.39 version: 4.112.39(react-dom@17.0.2(react@17.0.2))(react@17.0.2) ajv: - specifier: ^6.12.6 - version: 6.12.6 + specifier: ^8.17.1 + version: 8.17.1 + ajv-draft-04: + specifier: ^1.0.0 + version: 1.0.0(ajv@8.17.1) + ajv-formats: + specifier: ^3.0.1 + version: 3.0.1(ajv@8.17.1) lodash: specifier: ^4.17.21 version: 4.17.21 @@ -3886,8 +3898,14 @@ importers: specifier: ^4.93.6 version: 4.93.6(react-dom@17.0.2(react@17.0.2))(react@17.0.2) ajv: - specifier: ^6.12.6 - version: 6.12.6 + specifier: ^8.17.1 + version: 8.17.1 + ajv-draft-04: + specifier: ^1.0.0 + version: 1.0.0(ajv@8.17.1) + ajv-formats: + specifier: ^3.0.1 + version: 3.0.1(ajv@8.17.1) deep-object-diff: specifier: ^1.1.9 version: 1.1.9 @@ -4122,7 +4140,7 @@ importers: version: link:../tsconfig '@testing-library/jest-dom': specifier: ^6.4.6 - version: 6.4.6(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@22.5.2)(node-notifier@8.0.2)(ts-node@10.9.2(@types/node@22.5.2)(typescript@5.5.3))) + version: 6.4.6(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@20.14.2)(node-notifier@8.0.2)(ts-node@10.9.2(@types/node@20.14.2)(typescript@5.5.3))) '@testing-library/react': specifier: ^12.1.5 version: 12.1.5(react-dom@17.0.2(react@17.0.2))(react@17.0.2) @@ -4149,7 +4167,7 @@ importers: version: 2.4.1 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@22.5.2)(node-notifier@8.0.2)(ts-node@10.9.2(@types/node@22.5.2)(typescript@5.5.3)) + version: 29.7.0(@types/node@20.14.2)(node-notifier@8.0.2)(ts-node@10.9.2(@types/node@20.14.2)(typescript@5.5.3)) jest-environment-jsdom: specifier: ^29.7.0 version: 29.7.0 @@ -4158,13 +4176,13 @@ importers: version: 16.0.0 jest-when: specifier: ^3.6.0 - version: 3.6.0(jest@29.7.0(@types/node@22.5.2)(node-notifier@8.0.2)(ts-node@10.9.2(@types/node@22.5.2)(typescript@5.5.3))) + version: 3.6.0(jest@29.7.0(@types/node@20.14.2)(node-notifier@8.0.2)(ts-node@10.9.2(@types/node@20.14.2)(typescript@5.5.3))) rimraf: specifier: ^3.0.2 version: 3.0.2 ts-jest: specifier: ^29.1.5 - version: 29.1.5(@babel/core@7.16.12)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.16.12))(jest@29.7.0(@types/node@22.5.2)(node-notifier@8.0.2)(ts-node@10.9.2(@types/node@22.5.2)(typescript@5.5.3)))(typescript@5.5.3) + version: 29.1.5(@babel/core@7.16.12)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.16.12))(jest@29.7.0(@types/node@20.14.2)(node-notifier@8.0.2)(ts-node@10.9.2(@types/node@20.14.2)(typescript@5.5.3)))(typescript@5.5.3) typescript: specifier: ^5.5.3 version: 5.5.3 @@ -4559,11 +4577,17 @@ importers: specifier: ^4.93.6 version: 4.93.6(react-dom@17.0.2(react@17.0.2))(react@17.0.2) ajv: - specifier: ^6.12.6 - version: 6.12.6 + specifier: ^8.17.1 + version: 8.17.1 + ajv-draft-04: + specifier: ^1.0.0 + version: 1.0.0(ajv@8.17.1) ajv-errors: specifier: ^1.0.1 - version: 1.0.1(ajv@6.12.6) + version: 1.0.1(ajv@8.17.1) + ajv-formats: + specifier: ^3.0.1 + version: 3.0.1(ajv@8.17.1) deep-object-diff: specifier: ^1.1.9 version: 1.1.9 @@ -6990,8 +7014,11 @@ importers: specifier: ^4.112.39 version: 4.112.39(react-dom@17.0.2(react@17.0.2))(react@17.0.2) ajv: - specifier: ^6.12.6 - version: 6.12.6 + specifier: ^8.17.1 + version: 8.17.1 + ajv-formats: + specifier: ^3.0.1 + version: 3.0.1(ajv@8.17.1) axios: specifier: ^1.7.4 version: 1.7.4 @@ -7524,6 +7551,9 @@ importers: graphql: specifier: 14.3.1 version: 14.3.1 + html-replace-webpack-plugin: + specifier: ^2.6.0 + version: 2.6.0 html-webpack-plugin: specifier: ^5.3.2 version: 5.5.3(webpack@5.94.0(@swc/core@1.3.92)(webpack-cli@4.10.0)) @@ -7691,7 +7721,7 @@ importers: version: 2.3.0(react@17.0.2) react-json-view: specifier: ^1.21.3 - version: 1.21.3(@types/react@17.0.21)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) + version: 1.21.3(@types/react@17.0.21)(encoding@0.1.13)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) react-moment: specifier: 0.9.7 version: 0.9.7(moment@2.29.4)(prop-types@15.8.1)(react@17.0.2) @@ -8006,7 +8036,7 @@ importers: version: 2.3.0(react@17.0.2) react-json-view: specifier: ^1.21.3 - version: 1.21.3(@types/react@17.0.21)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) + version: 1.21.3(@types/react@17.0.21)(encoding@0.1.13)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) react-moment: specifier: 0.9.7 version: 0.9.7(moment@2.29.4)(prop-types@15.8.1)(react@17.0.2) @@ -8667,6 +8697,9 @@ importers: copy-webpack-plugin: specifier: ^11.0.0 version: 11.0.0(webpack@5.94.0(@swc/core@1.3.92)(webpack-cli@4.10.0)) + cors: + specifier: ^2.8.5 + version: 2.8.5 css-loader: specifier: ^5.2.6 version: 5.2.7(webpack@5.94.0(@swc/core@1.3.92)(webpack-cli@4.10.0)) @@ -11880,11 +11913,17 @@ importers: specifier: ^7.0.25 version: 7.7.7 ajv: - specifier: ^6.12.6 - version: 6.12.6 + specifier: ^8.17.1 + version: 8.17.1 + ajv-draft-04: + specifier: ^1.0.0 + version: 1.0.0(ajv@8.17.1) ajv-errors: specifier: ^1.0.1 - version: 1.0.1(ajv@6.12.6) + version: 1.0.1(ajv@8.17.1) + ajv-formats: + specifier: ^3.0.1 + version: 3.0.1(ajv@8.17.1) deep-object-diff: specifier: ^1.1.9 version: 1.1.9 @@ -19927,15 +19966,12 @@ packages: ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - ajv@8.11.0: - resolution: {integrity: sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==} - - ajv@8.12.0: - resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} - ajv@8.16.0: resolution: {integrity: sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==} + ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + ansi-align@2.0.0: resolution: {integrity: sha512-TdlOggdA/zURfMYa7ABC66j+oqfMew58KpJMbUlH3bcZP1b+cBHIHDDn5uH9INsxrHBPjsqM0tDB4jPTF/vgJA==} @@ -22878,6 +22914,9 @@ packages: fast-text-encoding@1.0.3: resolution: {integrity: sha512-dtm4QZH9nZtcDt8qJiOH9fcQd1NAgi+K1O2DbE6GG1PPCK/BWfOH3idCTRQ4ImXRUOyopDEgDEnVEE7Y/2Wrig==} + fast-uri@3.0.1: + resolution: {integrity: sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==} + fast-url-parser@1.1.3: resolution: {integrity: sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==} @@ -30441,8 +30480,8 @@ snapshots: '@apidevtools/openapi-schemas': 2.1.0 '@apidevtools/swagger-methods': 3.0.2 '@jsdevtools/ono': 7.1.3 - ajv: 8.12.0 - ajv-draft-04: 1.0.0(ajv@8.12.0) + ajv: 8.17.1 + ajv-draft-04: 1.0.0(ajv@8.17.1) call-me-maybe: 1.0.2 openapi-types: 7.2.3 @@ -30918,7 +30957,7 @@ snapshots: '@babel/core@7.24.9': dependencies: - '@ampproject/remapping': 2.2.0 + '@ampproject/remapping': 2.3.0 '@babel/code-frame': 7.24.7 '@babel/generator': 7.25.0 '@babel/helper-compilation-targets': 7.25.2 @@ -30929,7 +30968,7 @@ snapshots: '@babel/traverse': 7.25.3 '@babel/types': 7.25.2 convert-source-map: 2.0.0 - debug: 4.3.5 + debug: 4.3.6 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -38269,8 +38308,8 @@ snapshots: '@kubernetes-models/validate@3.0.0': dependencies: - ajv: 8.12.0 - ajv-formats: 2.1.1(ajv@8.12.0) + ajv: 8.17.1 + ajv-formats: 2.1.1(ajv@8.17.1) tslib: 2.6.2 '@leichtgewicht/ip-codec@2.0.4': {} @@ -39924,12 +39963,12 @@ snapshots: - '@types/react' - immer - '@readme/better-ajv-errors@1.6.0(ajv@8.12.0)': + '@readme/better-ajv-errors@1.6.0(ajv@8.17.1)': dependencies: '@babel/code-frame': 7.23.5 '@babel/runtime': 7.23.6 '@humanwhocodes/momoa': 2.0.4 - ajv: 8.12.0 + ajv: 8.17.1 chalk: 4.1.2 json-to-ast: 2.1.0 jsonpointer: 5.0.1 @@ -39947,10 +39986,10 @@ snapshots: '@apidevtools/openapi-schemas': 2.1.0 '@apidevtools/swagger-methods': 3.0.2 '@jsdevtools/ono': 7.1.3 - '@readme/better-ajv-errors': 1.6.0(ajv@8.12.0) + '@readme/better-ajv-errors': 1.6.0(ajv@8.17.1) '@readme/json-schema-ref-parser': 1.2.0 - ajv: 8.12.0 - ajv-draft-04: 1.0.0(ajv@8.12.0) + ajv: 8.17.1 + ajv-draft-04: 1.0.0(ajv@8.17.1) call-me-maybe: 1.0.2 openapi-types: 7.2.3 @@ -40082,7 +40121,7 @@ snapshots: '@severlessworkflow/sdk-typescript@3.0.3': dependencies: - ajv: 8.12.0 + ajv: 8.17.1 js-yaml: 4.1.0 '@sideway/address@4.1.4': @@ -42206,6 +42245,21 @@ snapshots: lz-string: 1.5.0 pretty-format: 27.5.1 + '@testing-library/jest-dom@6.4.6(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@20.14.2)(node-notifier@8.0.2)(ts-node@10.9.2(@types/node@20.14.2)(typescript@5.5.3)))': + dependencies: + '@adobe/css-tools': 4.4.0 + '@babel/runtime': 7.23.6 + aria-query: 5.1.3 + chalk: 3.0.0 + css.escape: 1.5.1 + dom-accessibility-api: 0.6.3 + lodash: 4.17.21 + redent: 3.0.0 + optionalDependencies: + '@jest/globals': 29.7.0 + '@types/jest': 29.5.12 + jest: 29.7.0(@types/node@20.14.2)(node-notifier@8.0.2)(ts-node@10.9.2(@types/node@20.14.2)(typescript@5.5.3)) + '@testing-library/jest-dom@6.4.6(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@22.5.2)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.92)(@types/node@22.5.2)(typescript@5.5.3)))': dependencies: '@adobe/css-tools': 4.4.0 @@ -43330,9 +43384,9 @@ snapshots: webpack: 5.94.0(webpack-cli@4.10.0) webpack-cli: 4.10.0(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@4.15.1)(webpack@5.94.0) - '@webpack-cli/configtest@1.2.0(webpack-cli@4.10.0(webpack-dev-server@4.15.1)(webpack@5.94.0))(webpack@5.94.0(webpack-cli@4.10.0))': + '@webpack-cli/configtest@1.2.0(webpack-cli@4.10.0(webpack-dev-server@4.15.1)(webpack@5.94.0))(webpack@5.94.0(@swc/core@1.3.92)(webpack-cli@4.10.0))': dependencies: - webpack: 5.94.0(webpack-cli@4.10.0) + webpack: 5.94.0(@swc/core@1.3.92)(webpack-cli@4.10.0) webpack-cli: 4.10.0(webpack-dev-server@4.15.1)(webpack@5.94.0) '@webpack-cli/configtest@1.2.0(webpack-cli@4.10.0(webpack@5.94.0))(webpack@5.94.0(webpack-cli@4.10.0))': @@ -43772,38 +43826,33 @@ snapshots: clean-stack: 2.2.0 indent-string: 4.0.0 - ajv-draft-04@1.0.0(ajv@8.12.0): + ajv-draft-04@1.0.0(ajv@8.17.1): optionalDependencies: - ajv: 8.12.0 + ajv: 8.17.1 - ajv-errors@1.0.1(ajv@6.12.6): + ajv-errors@1.0.1(ajv@8.17.1): dependencies: - ajv: 6.12.6 + ajv: 8.17.1 - ajv-formats@2.1.1(ajv@8.12.0): + ajv-formats@2.1.1(ajv@8.17.1): optionalDependencies: - ajv: 8.12.0 + ajv: 8.17.1 - ajv-formats@2.1.1(ajv@8.16.0): + ajv-formats@3.0.1(ajv@8.16.0): optionalDependencies: ajv: 8.16.0 - ajv-formats@3.0.1(ajv@8.16.0): + ajv-formats@3.0.1(ajv@8.17.1): optionalDependencies: - ajv: 8.16.0 + ajv: 8.17.1 ajv-keywords@3.5.2(ajv@6.12.6): dependencies: ajv: 6.12.6 - ajv-keywords@5.1.0(ajv@8.12.0): - dependencies: - ajv: 8.12.0 - fast-deep-equal: 3.1.3 - - ajv-keywords@5.1.0(ajv@8.16.0): + ajv-keywords@5.1.0(ajv@8.17.1): dependencies: - ajv: 8.16.0 + ajv: 8.17.1 fast-deep-equal: 3.1.3 ajv@6.12.6: @@ -43813,26 +43862,19 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 - ajv@8.11.0: - dependencies: - fast-deep-equal: 3.1.3 - json-schema-traverse: 1.0.0 - require-from-string: 2.0.2 - uri-js: 4.4.1 - - ajv@8.12.0: + ajv@8.16.0: dependencies: fast-deep-equal: 3.1.3 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 uri-js: 4.4.1 - ajv@8.16.0: + ajv@8.17.1: dependencies: fast-deep-equal: 3.1.3 + fast-uri: 3.0.1 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - uri-js: 4.4.1 ansi-align@2.0.0: dependencies: @@ -48282,6 +48324,8 @@ snapshots: fast-text-encoding@1.0.3: {} + fast-uri@3.0.1: {} + fast-url-parser@1.1.3: dependencies: punycode: 1.4.1 @@ -48310,6 +48354,12 @@ snapshots: transitivePeerDependencies: - encoding + fbemitter@3.0.0(encoding@0.1.13): + dependencies: + fbjs: 3.0.2(encoding@0.1.13) + transitivePeerDependencies: + - encoding + fbjs-css-vars@1.0.2: {} fbjs@3.0.2: @@ -48555,6 +48605,14 @@ snapshots: flow-parser@0.218.0: {} + flux@4.0.3(encoding@0.1.13)(react@17.0.2): + dependencies: + fbemitter: 3.0.0(encoding@0.1.13) + fbjs: 3.0.2(encoding@0.1.13) + react: 17.0.2 + transitivePeerDependencies: + - encoding + flux@4.0.3(react@17.0.2): dependencies: fbemitter: 3.0.0 @@ -54137,6 +54195,18 @@ snapshots: react-is@18.1.0: {} + react-json-view@1.21.3(@types/react@17.0.21)(encoding@0.1.13)(react-dom@17.0.2(react@17.0.2))(react@17.0.2): + dependencies: + flux: 4.0.3(encoding@0.1.13)(react@17.0.2) + react: 17.0.2 + react-base16-styling: 0.6.0 + react-dom: 17.0.2(react@17.0.2) + react-lifecycles-compat: 3.0.4 + react-textarea-autosize: 8.3.3(@types/react@17.0.21)(react@17.0.2) + transitivePeerDependencies: + - '@types/react' + - encoding + react-json-view@1.21.3(@types/react@17.0.21)(react-dom@17.0.2(react@17.0.2))(react@17.0.2): dependencies: flux: 4.0.3(react@17.0.2) @@ -54246,7 +54316,7 @@ snapshots: dependencies: object-assign: 4.1.1 react: 17.0.2 - react-is: 17.0.2 + react-is: 18.1.0 react-side-effect@2.1.2(react@17.0.2): dependencies: @@ -54998,16 +55068,16 @@ snapshots: schema-utils@4.0.0: dependencies: '@types/json-schema': 7.0.15 - ajv: 8.12.0 - ajv-formats: 2.1.1(ajv@8.12.0) - ajv-keywords: 5.1.0(ajv@8.12.0) + ajv: 8.17.1 + ajv-formats: 2.1.1(ajv@8.17.1) + ajv-keywords: 5.1.0(ajv@8.17.1) schema-utils@4.2.0: dependencies: '@types/json-schema': 7.0.15 - ajv: 8.16.0 - ajv-formats: 2.1.1(ajv@8.16.0) - ajv-keywords: 5.1.0(ajv@8.16.0) + ajv: 8.17.1 + ajv-formats: 2.1.1(ajv@8.17.1) + ajv-keywords: 5.1.0(ajv@8.17.1) scuid@1.1.0: {} @@ -57642,7 +57712,7 @@ snapshots: webpack-cli@4.10.0(webpack-dev-server@4.15.1)(webpack@5.94.0): dependencies: '@discoveryjs/json-ext': 0.5.7 - '@webpack-cli/configtest': 1.2.0(webpack-cli@4.10.0(webpack-dev-server@4.15.1)(webpack@5.94.0))(webpack@5.94.0(webpack-cli@4.10.0)) + '@webpack-cli/configtest': 1.2.0(webpack-cli@4.10.0(webpack-dev-server@4.15.1)(webpack@5.94.0))(webpack@5.94.0(@swc/core@1.3.92)(webpack-cli@4.10.0)) '@webpack-cli/info': 1.5.0(webpack-cli@4.10.0(webpack-dev-server@4.15.1)(webpack@5.94.0)) '@webpack-cli/serve': 1.7.0(webpack-cli@4.10.0(webpack-dev-server@4.15.1)(webpack@5.94.0))(webpack-dev-server@4.15.1(webpack-cli@4.10.0)(webpack@5.94.0)) colorette: 2.0.16 @@ -57652,7 +57722,7 @@ snapshots: import-local: 3.0.2 interpret: 2.2.0 rechoir: 0.7.0 - webpack: 5.94.0(webpack-cli@4.10.0) + webpack: 5.94.0(@swc/core@1.3.92)(webpack-cli@4.10.0) webpack-merge: 5.9.0 optionalDependencies: webpack-dev-server: 4.15.1(webpack-cli@4.10.0)(webpack@5.94.0) @@ -57673,14 +57743,14 @@ snapshots: webpack: 5.94.0(webpack-cli@4.10.0) webpack-merge: 5.9.0 - webpack-dev-middleware@5.3.3(webpack@5.94.0(webpack-cli@4.10.0)): + webpack-dev-middleware@5.3.3(webpack@5.94.0(@swc/core@1.3.92)(webpack-cli@4.10.0)): dependencies: colorette: 2.0.20 memfs: 3.5.1 mime-types: 2.1.34 range-parser: 1.2.1 schema-utils: 4.2.0 - webpack: 5.94.0(webpack-cli@4.10.0) + webpack: 5.94.0(@swc/core@1.3.92)(webpack-cli@4.10.0) webpack-dev-middleware@5.3.3(webpack@5.94.0): dependencies: @@ -57772,10 +57842,10 @@ snapshots: serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack-dev-middleware: 5.3.3(webpack@5.94.0(webpack-cli@4.10.0)) + webpack-dev-middleware: 5.3.3(webpack@5.94.0(@swc/core@1.3.92)(webpack-cli@4.10.0)) ws: 8.18.0 optionalDependencies: - webpack: 5.94.0(webpack-cli@4.10.0) + webpack: 5.94.0(@swc/core@1.3.92)(webpack-cli@4.10.0) webpack-cli: 4.10.0(webpack-dev-server@4.15.1)(webpack@5.94.0) transitivePeerDependencies: - bufferutil @@ -58390,7 +58460,7 @@ snapshots: yaml-language-server@1.10.0: dependencies: - ajv: 8.11.0 + ajv: 8.17.1 request-light: 0.5.8 vscode-json-languageservice: 4.1.8 vscode-languageserver: 7.0.0