diff --git a/packages/dmn-editor/jest.config.js b/packages/dmn-editor/jest.config.js new file mode 100644 index 00000000000..cd848227e0f --- /dev/null +++ b/packages/dmn-editor/jest.config.js @@ -0,0 +1,30 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +const { config, babelTransform, typescriptTransform } = require("@kie-tools/jest-base/jest.config"); + +/** @type {import('ts-jest').JestConfigWithTsJest} */ +module.exports = { + ...config, + testEnvironment: "node", + transform: { + ...babelTransform, + ...typescriptTransform, + }, +}; diff --git a/packages/dmn-editor/package.json b/packages/dmn-editor/package.json index 1d0aab8ade2..a7328dac98e 100644 --- a/packages/dmn-editor/package.json +++ b/packages/dmn-editor/package.json @@ -18,13 +18,14 @@ ], "scripts": { "build:dev": "rimraf dist && pnpm copy:css && tsc -p tsconfig.json", - "build:prod": "rimraf dist && pnpm copy:css && pnpm lint && tsc -p tsconfig.json && pnpm test-e2e", + "build:prod": "rimraf dist && pnpm copy:css && pnpm lint && tsc -p tsconfig.json && pnpm test-e2e && pnpm test", "build:storybook": "storybook build -o dist-storybook", "copy:css": "copyfiles -u 1 \"src/**/*.{sass,scss,css}\" dist/", "lint": "run-script-if --bool \"$(build-env linters.run)\" --then \"kie-tools--eslint ./src\"", "start": "run-script-os", "start:linux:darwin": "cross-env STORYBOOK_PORT=$(build-env dmnEditor.storybook.port) pnpm kie-tools--storybook --storybookArgs=\"dev --no-open\"", "start:win32": "pnpm powershell \"cross-env STORYBOOK_PORT=$(build-env dmnEditor.storybook.port) pnpm kie-tools--storybook --storybookArgs='dev --no-open'", + "test": "run-script-if --ignore-errors \"$(build-env tests.ignoreFailures)\" --bool \"$(build-env tests.run)\" --then \"jest --silent --verbose --passWithNoTests\"", "test-e2e": "run-script-if --ignore-errors \"$(build-env endToEndTests.ignoreFailures)\" --bool \"$(build-env endToEndTests.run)\" --then \"pnpm rimraf ./dist-tests-e2e\" \"pnpm test-e2e:run\"", "test-e2e:open": "pnpm exec playwright show-report dist-tests-e2e/reports", "test-e2e:run": "pnpm exec playwright test" @@ -65,6 +66,7 @@ "@babel/preset-typescript": "^7.22.5", "@kie-tools-core/webpack-base": "workspace:*", "@kie-tools/eslint": "workspace:*", + "@kie-tools/jest-base": "workspace:*", "@kie-tools/playwright-base": "workspace:*", "@kie-tools/root-env": "workspace:*", "@kie-tools/storybook-base": "workspace:*", @@ -79,6 +81,8 @@ "@storybook/react-webpack5": "^7.3.2", "@types/d3-drag": "^3.0.3", "@types/d3-selection": "^3.0.6", + "@types/jest": "^29.5.12", + "@types/jest-when": "^3.5.5", "@types/lodash": "^4.14.168", "@types/node": "^20.14.2", "@types/react": "^17.0.6", @@ -89,11 +93,15 @@ "cross-env": "^7.0.3", "deep-object-diff": "^1.1.9", "file-loader": "^6.2.0", + "jest": "^29.7.0", + "jest-junit": "^16.0.0", + "jest-when": "^3.6.0", "lodash": "^4.17.21", "rimraf": "^3.0.2", "run-script-os": "^1.1.6", "start-server-and-test": "^2.0.3", "storybook": "^7.3.2", + "ts-jest": "^29.1.5", "typescript": "^5.5.3", "webpack": "^5.94.0", "webpack-cli": "^4.10.0", diff --git a/packages/dmn-editor/src/boxedExpressions/BoxedExpressionScreen.tsx b/packages/dmn-editor/src/boxedExpressions/BoxedExpressionScreen.tsx index 18c7be1da75..3a0c4e08fa8 100644 --- a/packages/dmn-editor/src/boxedExpressions/BoxedExpressionScreen.tsx +++ b/packages/dmn-editor/src/boxedExpressions/BoxedExpressionScreen.tsx @@ -89,7 +89,6 @@ export function BoxedExpressionScreen({ container }: { container: React.RefObjec const dmnEditorStoreApi = useDmnEditorStoreApi(); const thisDmn = useDmnEditorStore((s) => s.dmn); - const diagram = useDmnEditorStore((s) => s.diagram); const activeDrgElementId = useDmnEditorStore((s) => s.boxedExpressionEditor.activeDrgElementId); const isPropertiesPanelOpen = useDmnEditorStore((s) => s.boxedExpressionEditor.propertiesPanel.isOpen); diff --git a/packages/dmn-editor/src/mutations/updateExpressionWidths.ts b/packages/dmn-editor/src/mutations/updateExpressionWidths.ts index 7e6fb2d3dce..51574efcec8 100644 --- a/packages/dmn-editor/src/mutations/updateExpressionWidths.ts +++ b/packages/dmn-editor/src/mutations/updateExpressionWidths.ts @@ -30,20 +30,9 @@ export function updateExpressionWidths({ drdIndex: number; widthsById: Map; }): void { - const { widthsExtension, widths } = addOrGetDrd({ definitions, drdIndex }); - const componentWidthsMap = widths.reduce( - (acc, e) => - e["@_dmnElementRef"] - ? acc.set( - e["@_dmnElementRef"], - (e["kie:width"] ?? []).map((vv) => vv.__$$text) - ) - : acc, - new Map() - ); + const { widthsExtension } = addOrGetDrd({ definitions, drdIndex }); - widthsById.forEach((v, k) => componentWidthsMap.set(k, v)); - widthsExtension["kie:ComponentWidths"] = [...componentWidthsMap.entries()].map(([k, v]) => ({ + widthsExtension["kie:ComponentWidths"] = [...widthsById.entries()].map(([k, v]) => ({ "@_dmnElementRef": k, "kie:width": v.map((vv) => ({ __$$text: vv })), })); diff --git a/packages/dmn-editor/tests/mutations/updateExpressionWidth.test.ts b/packages/dmn-editor/tests/mutations/updateExpressionWidth.test.ts new file mode 100644 index 00000000000..a7ab7490158 --- /dev/null +++ b/packages/dmn-editor/tests/mutations/updateExpressionWidth.test.ts @@ -0,0 +1,242 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Normalized } from "@kie-tools/dmn-editor/dist/normalization/normalize"; +import { DMN15__tDefinitions } from "@kie-tools/dmn-marshaller/dist/schemas/dmn-1_5/ts-gen/types"; +import { generateUuid } from "@kie-tools/boxed-expression-component/dist/api"; +import { KIE__tComponentsWidthsExtension } from "@kie-tools/dmn-marshaller/dist/schemas/kie-1_0/ts-gen/types"; +import { updateExpressionWidths } from "@kie-tools/dmn-editor/dist/mutations/updateExpressionWidths"; + +describe("updateExpressionWidth", () => { + const drdIndex = 0; + + test("when a definition is deleted from widthsFromId map, it should also be deleted from definitions", () => { + const widthEntryForElementA = { dmnElementRef: "a", widths: [10, 150, 110] }; + const widthEntryForElementB = { dmnElementRef: "b", widths: [20, 250, 210] }; + const widthEntryForElementC = { dmnElementRef: "c", widths: [30, 350, 310] }; + const widthEntryForElementD = { dmnElementRef: "d", widths: [40, 450, 410] }; + + const definitions = createDefinitionsWithComponentWidths([ + widthEntryForElementA, + widthEntryForElementB, + widthEntryForElementC, + widthEntryForElementD, + ]); + + const widthsById: Map = new Map([ + [widthEntryForElementA.dmnElementRef, widthEntryForElementA.widths], + [widthEntryForElementB.dmnElementRef, widthEntryForElementB.widths], + [widthEntryForElementC.dmnElementRef, widthEntryForElementC.widths], + ]); + + updateExpressionWidths({ definitions, drdIndex, widthsById }); + + expect( + definitionContainsWidthExtension({ + widthEntry: widthEntryForElementA, + definitions: definitions, + }) + ).toBeTruthy(); + + expect( + definitionContainsWidthExtension({ + widthEntry: widthEntryForElementB, + definitions: definitions, + }) + ).toBeTruthy(); + + expect( + definitionContainsWidthExtension({ + widthEntry: widthEntryForElementC, + definitions: definitions, + }) + ).toBeTruthy(); + + expect( + definitionContainsWidthExtension({ + widthEntry: widthEntryForElementD, + definitions: definitions, + }) + ).toBeFalsy(); + }); + + test("when a definition is changed in widthsFromId map, it should be changed in definitions", () => { + const originalWidthEntryForElementA = { dmnElementRef: "a", widths: [1, 1, 1] }; + const originalWidthEntryForElementB = { dmnElementRef: "b", widths: [2, 2, 2] }; + const originalWidthEntryForElementC = { dmnElementRef: "c", widths: [3, 3, 3] }; + + const changedWidthEntryForElementA = { dmnElementRef: "a", widths: [11, 11, 11, 11, 11] }; + const changedWidthEntryForElementB = { dmnElementRef: "b", widths: [20, 20, 20] }; + const changedWidthEntryForElementC = { dmnElementRef: "c", widths: [3, 3] }; + + const definitions = createDefinitionsWithComponentWidths([ + originalWidthEntryForElementA, + originalWidthEntryForElementB, + originalWidthEntryForElementC, + ]); + + const widthsById: Map = new Map([ + [changedWidthEntryForElementA.dmnElementRef, changedWidthEntryForElementA.widths], + [changedWidthEntryForElementB.dmnElementRef, changedWidthEntryForElementB.widths], + [changedWidthEntryForElementC.dmnElementRef, changedWidthEntryForElementC.widths], + ]); + + updateExpressionWidths({ definitions, drdIndex, widthsById }); + + expect( + definitionContainsWidthExtension({ + widthEntry: originalWidthEntryForElementA, + definitions: definitions, + }) + ).toBeFalsy(); + + expect( + definitionContainsWidthExtension({ + widthEntry: originalWidthEntryForElementB, + definitions: definitions, + }) + ).toBeFalsy(); + + expect( + definitionContainsWidthExtension({ + widthEntry: originalWidthEntryForElementC, + definitions: definitions, + }) + ).toBeFalsy(); + + expect( + definitionContainsWidthExtension({ + widthEntry: changedWidthEntryForElementA, + definitions: definitions, + }) + ).toBeTruthy(); + + expect( + definitionContainsWidthExtension({ + widthEntry: changedWidthEntryForElementB, + definitions: definitions, + }) + ).toBeTruthy(); + + expect( + definitionContainsWidthExtension({ + widthEntry: changedWidthEntryForElementC, + definitions: definitions, + }) + ).toBeTruthy(); + }); + + test("when a definition is added in widthsFromId map, it should also be added in definitions", () => { + const originalWidthEntryForElementA = { dmnElementRef: "a", widths: [1, 1, 1] }; + const originalWidthEntryForElementB = { dmnElementRef: "b", widths: [2, 2, 2] }; + + const newWidthEntry = { dmnElementRef: "c", widths: [3, 3] }; + + const definitions = createDefinitionsWithComponentWidths([ + originalWidthEntryForElementA, + originalWidthEntryForElementB, + ]); + + const widthsById: Map = new Map([ + [originalWidthEntryForElementA.dmnElementRef, originalWidthEntryForElementA.widths], + [originalWidthEntryForElementB.dmnElementRef, originalWidthEntryForElementB.widths], + [newWidthEntry.dmnElementRef, newWidthEntry.widths], + ]); + + updateExpressionWidths({ definitions, drdIndex, widthsById }); + + expect( + definitionContainsWidthExtension({ + widthEntry: originalWidthEntryForElementA, + definitions: definitions, + }) + ).toBeTruthy(); + + expect( + definitionContainsWidthExtension({ + widthEntry: originalWidthEntryForElementB, + definitions: definitions, + }) + ).toBeTruthy(); + + expect( + definitionContainsWidthExtension({ + widthEntry: newWidthEntry, + definitions: definitions, + }) + ).toBeTruthy(); + }); +}); + +function definitionContainsWidthExtension(args: { + widthEntry: { dmnElementRef: string; widths: number[] }; + definitions: Normalized; +}) { + const componentsWidthExtension = + args.definitions?.["dmndi:DMNDI"]?.["dmndi:DMNDiagram"]?.[0]["di:extension"]?.["kie:ComponentsWidthsExtension"]; + + const element = { + "@_dmnElementRef": args.widthEntry.dmnElementRef, + "kie:width": args.widthEntry.widths.map((w) => { + return { __$$text: w }; + }), + }; + + return componentsWidthExtension?.["kie:ComponentWidths"]?.find( + (e) => + e["@_dmnElementRef"] === element["@_dmnElementRef"] && + e["kie:width"]?.length === element["kie:width"].length && + e["kie:width"]?.every((val, index) => val.__$$text === element["kie:width"]?.[index].__$$text) + ); +} + +function createDefinitionsWithComponentWidths(widthDefinition: { dmnElementRef: string; widths: number[] }[]) { + // Do not inline this variable for type safety. See https://github.com/microsoft/TypeScript/issues/241 + const definitions: Normalized = { + "@_namespace": "https://kie.org/dmn/_982CA10C-B1B9-495C-9CFC-98FAA801BB50", + "@_id": generateUuid(), + "@_name": "my definitions", + "dmndi:DMNDI": { + "dmndi:DMNDiagram": [ + { + "@_id": generateUuid(), + "di:extension": createComponentWidthExtension(widthDefinition), + }, + ], + }, + }; + return definitions; +} + +function createComponentWidthExtension(widthDefinition: { dmnElementRef: string; widths: number[] }[]) { + // Do not inline this variable for type safety. See https://github.com/microsoft/TypeScript/issues/241 + const componentsWidthsExtension: KIE__tComponentsWidthsExtension = { + ComponentWidths: [ + ...widthDefinition.map((w) => { + return { + "@_dmnElementRef": w.dmnElementRef, + width: w.widths.map((w) => { + return { __$$text: w }; + }), + }; + }), + ], + }; + return componentsWidthsExtension; +} diff --git a/packages/dmn-editor/tsconfig.tests.json b/packages/dmn-editor/tsconfig.tests.json new file mode 100644 index 00000000000..fc8520e7376 --- /dev/null +++ b/packages/dmn-editor/tsconfig.tests.json @@ -0,0 +1,3 @@ +{ + "extends": "./tsconfig.json" +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2e6dcff6232..7a7854836e8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -3373,6 +3373,9 @@ importers: '@kie-tools/eslint': specifier: workspace:* version: link:../eslint + '@kie-tools/jest-base': + specifier: workspace:* + version: link:../jest-base '@kie-tools/playwright-base': specifier: workspace:* version: link:../playwright-base @@ -3415,6 +3418,12 @@ importers: '@types/d3-selection': specifier: ^3.0.6 version: 3.0.10 + '@types/jest': + specifier: ^29.5.12 + version: 29.5.12 + '@types/jest-when': + specifier: ^3.5.5 + version: 3.5.5 '@types/lodash': specifier: ^4.14.168 version: 4.14.169 @@ -3445,6 +3454,15 @@ importers: file-loader: specifier: ^6.2.0 version: 6.2.0(webpack@5.94.0(@swc/core@1.3.92)(esbuild@0.18.20)(webpack-cli@4.10.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(@swc/core@1.3.92)(@types/node@20.14.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(@swc/core@1.3.92)(@types/node@20.14.2)(typescript@5.5.3))) lodash: specifier: ^4.17.21 version: 4.17.21 @@ -3460,6 +3478,9 @@ importers: storybook: specifier: ^7.3.2 version: 7.6.13(encoding@0.1.13) + ts-jest: + specifier: ^29.1.5 + version: 29.1.5(@babel/core@7.23.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.23.0))(esbuild@0.18.20)(jest@29.7.0(@types/node@20.14.2)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.92)(@types/node@20.14.2)(typescript@5.5.3)))(typescript@5.5.3) typescript: specifier: ^5.5.3 version: 5.5.3 @@ -37906,6 +37927,43 @@ snapshots: - ts-node optional: true + '@jest/core@29.7.0(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.92)(@types/node@20.14.2)(typescript@5.5.3))': + dependencies: + '@jest/console': 29.7.0 + '@jest/reporters': 29.7.0(node-notifier@8.0.2) + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.14.2 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + ci-info: 3.3.2 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-changed-files: 29.7.0 + jest-config: 29.7.0(@types/node@20.14.2)(ts-node@10.9.2(@swc/core@1.3.92)(@types/node@20.14.2)(typescript@5.5.3)) + jest-haste-map: 29.7.0 + jest-message-util: 29.7.0 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-resolve-dependencies: 29.7.0 + jest-runner: 29.7.0 + jest-runtime: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + jest-watcher: 29.7.0 + micromatch: 4.0.5 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-ansi: 6.0.1 + optionalDependencies: + node-notifier: 8.0.2 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + - ts-node + '@jest/core@29.7.0(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: '@jest/console': 29.7.0 @@ -46271,6 +46329,21 @@ snapshots: safe-buffer: 5.2.1 sha.js: 2.4.11 + create-jest@29.7.0(@types/node@20.14.2)(ts-node@10.9.2(@swc/core@1.3.92)(@types/node@20.14.2)(typescript@5.5.3)): + dependencies: + '@jest/types': 29.6.3 + chalk: 4.1.2 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-config: 29.7.0(@types/node@20.14.2)(ts-node@10.9.2(@swc/core@1.3.92)(@types/node@20.14.2)(typescript@5.5.3)) + jest-util: 29.7.0 + prompts: 2.4.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + create-jest@29.7.0(@types/node@20.14.2)(ts-node@10.9.2(@types/node@20.14.2)(typescript@5.5.3)): dependencies: '@jest/types': 29.6.3 @@ -50267,6 +50340,27 @@ snapshots: - babel-plugin-macros - supports-color + jest-cli@29.7.0(@types/node@20.14.2)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.92)(@types/node@20.14.2)(typescript@5.5.3)): + dependencies: + '@jest/core': 29.7.0(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.92)(@types/node@20.14.2)(typescript@5.5.3)) + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + chalk: 4.1.2 + create-jest: 29.7.0(@types/node@20.14.2)(ts-node@10.9.2(@swc/core@1.3.92)(@types/node@20.14.2)(typescript@5.5.3)) + exit: 0.1.2 + import-local: 3.0.2 + jest-config: 29.7.0(@types/node@20.14.2)(ts-node@10.9.2(@swc/core@1.3.92)(@types/node@20.14.2)(typescript@5.5.3)) + jest-util: 29.7.0 + jest-validate: 29.7.0 + yargs: 17.7.2 + optionalDependencies: + node-notifier: 8.0.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + jest-cli@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: '@jest/core': 29.7.0(node-notifier@8.0.2)(ts-node@10.9.2(@types/node@20.14.2)(typescript@5.5.3)) @@ -50421,6 +50515,37 @@ snapshots: - supports-color optional: true + jest-config@29.7.0(@types/node@20.14.2)(ts-node@10.9.2(@swc/core@1.3.92)(@types/node@20.14.2)(typescript@5.5.3)): + dependencies: + '@babel/core': 7.23.9 + '@jest/test-sequencer': 29.7.0 + '@jest/types': 29.6.3 + babel-jest: 29.7.0(@babel/core@7.23.9) + chalk: 4.1.2 + ci-info: 3.3.2 + deepmerge: 4.2.2 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-circus: 29.7.0 + jest-environment-node: 29.7.0 + jest-get-type: 29.6.3 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-runner: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + micromatch: 4.0.5 + parse-json: 5.2.0 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-json-comments: 3.1.1 + optionalDependencies: + '@types/node': 20.14.2 + ts-node: 10.9.2(@swc/core@1.3.92)(@types/node@20.14.2)(typescript@5.5.3) + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + jest-config@29.7.0(@types/node@20.14.2)(ts-node@10.9.2(@swc/core@1.3.92)(@types/node@22.5.2)(typescript@5.5.3)): dependencies: '@babel/core': 7.23.9 @@ -50941,6 +51066,10 @@ snapshots: jest-webextension-mock@3.9.0: {} + jest-when@3.6.0(jest@29.7.0(@types/node@20.14.2)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.92)(@types/node@20.14.2)(typescript@5.5.3))): + dependencies: + jest: 29.7.0(@types/node@20.14.2)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.92)(@types/node@20.14.2)(typescript@5.5.3)) + jest-when@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))): dependencies: 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)) @@ -50981,6 +51110,20 @@ snapshots: merge-stream: 2.0.0 supports-color: 8.1.1 + jest@29.7.0(@types/node@20.14.2)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.92)(@types/node@20.14.2)(typescript@5.5.3)): + dependencies: + '@jest/core': 29.7.0(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.92)(@types/node@20.14.2)(typescript@5.5.3)) + '@jest/types': 29.6.3 + import-local: 3.0.2 + jest-cli: 29.7.0(@types/node@20.14.2)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.92)(@types/node@20.14.2)(typescript@5.5.3)) + optionalDependencies: + node-notifier: 8.0.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + 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: '@jest/core': 29.7.0(node-notifier@8.0.2)(ts-node@10.9.2(@types/node@20.14.2)(typescript@5.5.3)) @@ -56629,6 +56772,25 @@ snapshots: '@jest/types': 29.6.3 babel-jest: 29.7.0(@babel/core@7.18.10) + ts-jest@29.1.5(@babel/core@7.23.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.23.0))(esbuild@0.18.20)(jest@29.7.0(@types/node@20.14.2)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.92)(@types/node@20.14.2)(typescript@5.5.3)))(typescript@5.5.3): + dependencies: + bs-logger: 0.2.6 + fast-json-stable-stringify: 2.1.0 + jest: 29.7.0(@types/node@20.14.2)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.92)(@types/node@20.14.2)(typescript@5.5.3)) + jest-util: 29.7.0 + json5: 2.2.3 + lodash.memoize: 4.1.2 + make-error: 1.3.6 + semver: 7.5.4 + typescript: 5.5.3 + yargs-parser: 21.1.1 + optionalDependencies: + '@babel/core': 7.23.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + babel-jest: 29.7.0(@babel/core@7.23.0) + esbuild: 0.18.20 + ts-jest@29.1.5(@babel/core@7.23.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.23.0))(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)))(typescript@5.5.3): dependencies: bs-logger: 0.2.6 @@ -56812,6 +56974,27 @@ snapshots: ts-log@2.2.5: {} + ts-node@10.9.2(@swc/core@1.3.92)(@types/node@20.14.2)(typescript@5.5.3): + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.9 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.3 + '@types/node': 20.14.2 + acorn: 8.10.0 + acorn-walk: 8.2.0 + arg: 4.1.0 + create-require: 1.1.1 + diff: 4.0.1 + make-error: 1.3.6 + typescript: 5.5.3 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + optionalDependencies: + '@swc/core': 1.3.92 + optional: true + ts-node@10.9.2(@swc/core@1.3.92)(@types/node@22.5.2)(typescript@5.5.3): dependencies: '@cspotcode/source-map-support': 0.8.1