From 91df54939d6e3a8e462fb0ff631e808369a02dee Mon Sep 17 00:00:00 2001 From: Zhongpin Wang Date: Thu, 14 Nov 2024 16:03:39 +0100 Subject: [PATCH 1/2] fix: Get by index from response wrapper (#290) --- .changeset/stale-pans-approve.md | 6 +++++ ...re-openai-chat-completion-response.test.ts | 9 -------- .../azure-openai-chat-completion-response.ts | 23 ++++--------------- packages/orchestration/package.json | 3 +-- .../src/orchestration-response.test.ts | 9 -------- .../src/orchestration-response.ts | 23 ++++--------------- pnpm-lock.yaml | 9 +++----- 7 files changed, 19 insertions(+), 63 deletions(-) create mode 100644 .changeset/stale-pans-approve.md diff --git a/.changeset/stale-pans-approve.md b/.changeset/stale-pans-approve.md new file mode 100644 index 000000000..2580d3a4e --- /dev/null +++ b/.changeset/stale-pans-approve.md @@ -0,0 +1,6 @@ +--- +'@sap-ai-sdk/foundation-models': patch +'@sap-ai-sdk/orchestration': patch +--- + +[Fixed Issue] Get choice via index by comparing the `index` property instead of using array index. diff --git a/packages/foundation-models/src/azure-openai/azure-openai-chat-completion-response.test.ts b/packages/foundation-models/src/azure-openai/azure-openai-chat-completion-response.test.ts index f423168e1..3fd6efad8 100644 --- a/packages/foundation-models/src/azure-openai/azure-openai-chat-completion-response.test.ts +++ b/packages/foundation-models/src/azure-openai/azure-openai-chat-completion-response.test.ts @@ -1,5 +1,3 @@ -import { createLogger } from '@sap-cloud-sdk/util'; -import { jest } from '@jest/globals'; import { parseMockResponse } from '../../../../test-util/mock-http.js'; import { AzureOpenAiChatCompletionResponse } from './azure-openai-chat-completion-response.js'; import type { HttpResponse } from '@sap-cloud-sdk/http-client'; @@ -51,14 +49,7 @@ describe('OpenAI chat completion response', () => { }); it('should return undefined when convenience function is called with incorrect index', () => { - const logger = createLogger({ - package: 'foundation-models', - messageContext: 'azure-openai-chat-completion-response' - }); - const errorSpy = jest.spyOn(logger, 'error'); expect(azureOpenAiChatResponse.getFinishReason(1)).toBeUndefined(); - expect(errorSpy).toHaveBeenCalledWith('Choice index 1 is out of bounds.'); expect(azureOpenAiChatResponse.getContent(1)).toBeUndefined(); - expect(errorSpy).toHaveBeenCalledTimes(2); }); }); diff --git a/packages/foundation-models/src/azure-openai/azure-openai-chat-completion-response.ts b/packages/foundation-models/src/azure-openai/azure-openai-chat-completion-response.ts index 3765b737b..68fbed7c2 100644 --- a/packages/foundation-models/src/azure-openai/azure-openai-chat-completion-response.ts +++ b/packages/foundation-models/src/azure-openai/azure-openai-chat-completion-response.ts @@ -1,12 +1,6 @@ -import { createLogger } from '@sap-cloud-sdk/util'; import type { HttpResponse } from '@sap-cloud-sdk/http-client'; import type { AzureOpenAiCreateChatCompletionResponse } from './client/inference/schema/index.js'; -const logger = createLogger({ - package: 'foundation-models', - messageContext: 'azure-openai-chat-completion-response' -}); - /** * Azure OpenAI chat completion response. */ @@ -32,11 +26,8 @@ export class AzureOpenAiChatCompletionResponse { * @param choiceIndex - The index of the choice to parse. * @returns The finish reason. */ - getFinishReason( - choiceIndex = 0 - ): this['data']['choices'][0]['finish_reason'] { - this.logInvalidChoiceIndex(choiceIndex); - return this.data.choices[choiceIndex]?.finish_reason; + getFinishReason(choiceIndex = 0): string | undefined { + return this.data.choices.find(c => c.index === choiceIndex)?.finish_reason; } /** @@ -45,13 +36,7 @@ export class AzureOpenAiChatCompletionResponse { * @returns The message content. */ getContent(choiceIndex = 0): string | undefined | null { - this.logInvalidChoiceIndex(choiceIndex); - return this.data.choices[choiceIndex]?.message?.content; - } - - private logInvalidChoiceIndex(choiceIndex: number): void { - if (choiceIndex < 0 || choiceIndex >= this.data.choices.length) { - logger.error(`Choice index ${choiceIndex} is out of bounds.`); - } + return this.data.choices.find(c => c.index === choiceIndex)?.message + ?.content; } } diff --git a/packages/orchestration/package.json b/packages/orchestration/package.json index 0aef09f0d..84c90d58b 100644 --- a/packages/orchestration/package.json +++ b/packages/orchestration/package.json @@ -33,7 +33,6 @@ "dependencies": { "@sap-ai-sdk/core": "workspace:^", "@sap-ai-sdk/ai-api": "workspace:^", - "@sap-cloud-sdk/http-client": "^3.22.2", - "@sap-cloud-sdk/util": "^3.22.2" + "@sap-cloud-sdk/http-client": "^3.22.2" } } diff --git a/packages/orchestration/src/orchestration-response.test.ts b/packages/orchestration/src/orchestration-response.test.ts index d80032df7..398a26b4b 100644 --- a/packages/orchestration/src/orchestration-response.test.ts +++ b/packages/orchestration/src/orchestration-response.test.ts @@ -1,5 +1,3 @@ -import { createLogger } from '@sap-cloud-sdk/util'; -import { jest } from '@jest/globals'; import { parseMockResponse } from '../../../test-util/mock-http.js'; import { OrchestrationResponse } from './orchestration-response.js'; import type { HttpResponse } from '@sap-cloud-sdk/http-client'; @@ -48,15 +46,8 @@ describe('OrchestrationResponse', () => { }); it('should return undefined when convenience function is called with incorrect index', () => { - const logger = createLogger({ - package: 'orchestration', - messageContext: 'orchestration-response' - }); - const errorSpy = jest.spyOn(logger, 'error'); expect(orchestrationResponse.getFinishReason(1)).toBeUndefined(); - expect(errorSpy).toHaveBeenCalledWith('Choice index 1 is out of bounds.'); expect(orchestrationResponse.getContent(1)).toBeUndefined(); - expect(errorSpy).toHaveBeenCalledTimes(2); }); it('should throw if content that was filtered is accessed', () => { diff --git a/packages/orchestration/src/orchestration-response.ts b/packages/orchestration/src/orchestration-response.ts index 9197a3774..13f5d281e 100644 --- a/packages/orchestration/src/orchestration-response.ts +++ b/packages/orchestration/src/orchestration-response.ts @@ -1,15 +1,9 @@ -import { createLogger } from '@sap-cloud-sdk/util'; import type { HttpResponse } from '@sap-cloud-sdk/http-client'; import type { CompletionPostResponse, TokenUsage } from './client/api/schema/index.js'; -const logger = createLogger({ - package: 'orchestration', - messageContext: 'orchestration-response' -}); - /** * Representation of an orchestration response. */ @@ -35,8 +29,7 @@ export class OrchestrationResponse { * @returns The finish reason. */ getFinishReason(choiceIndex = 0): string | undefined { - this.logInvalidChoiceIndex(choiceIndex); - return this.getChoices()[choiceIndex]?.finish_reason; + return this.getChoices().find(c => c.index === choiceIndex)?.finish_reason; } /** @@ -46,25 +39,19 @@ export class OrchestrationResponse { * @returns The message content. */ getContent(choiceIndex = 0): string | undefined { - this.logInvalidChoiceIndex(choiceIndex); + const choice = this.getChoices().find(c => c.index === choiceIndex); if ( - this.getChoices()[choiceIndex]?.message?.content === '' && - this.getChoices()[choiceIndex]?.finish_reason === 'content_filter' + choice?.message?.content === '' && + choice?.finish_reason === 'content_filter' ) { throw new Error( 'Content generated by the LLM was filtered by the output filter. Please try again with a different prompt or filter configuration.' ); } - return this.getChoices()[choiceIndex]?.message?.content; + return choice?.message?.content; } private getChoices() { return this.data.orchestration_result.choices; } - - private logInvalidChoiceIndex(choiceIndex: number): void { - if (choiceIndex < 0 || choiceIndex >= this.getChoices().length) { - logger.error(`Choice index ${choiceIndex} is out of bounds.`); - } - } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c9870433f..ca2b218de 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -166,9 +166,6 @@ importers: '@sap-cloud-sdk/http-client': specifier: ^3.22.2 version: 3.22.2 - '@sap-cloud-sdk/util': - specifier: ^3.22.2 - version: 3.22.2 sample-cap: dependencies: @@ -5382,7 +5379,7 @@ snapshots: eslint: 9.14.0 eslint-config-prettier: 9.1.0(eslint@9.14.0) eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.8.1(eslint@9.14.0)(typescript@5.6.3))(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.8.1(eslint@9.14.0)(typescript@5.6.3))(eslint@9.14.0))(eslint@9.14.0) - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.8.1(eslint@9.14.0)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@9.14.0) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.8.1(eslint@9.14.0)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.8.1(eslint@9.14.0)(typescript@5.6.3))(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.8.1(eslint@9.14.0)(typescript@5.6.3))(eslint@9.14.0))(eslint@9.14.0))(eslint@9.14.0) eslint-plugin-jsdoc: 50.3.2(eslint@9.14.0) eslint-plugin-prettier: 5.2.1(@types/eslint@8.56.10)(eslint-config-prettier@9.1.0(eslint@9.14.0))(eslint@9.14.0)(prettier@3.3.3) eslint-plugin-regex: 1.10.0(eslint@9.14.0) @@ -6711,7 +6708,7 @@ snapshots: is-bun-module: 1.2.1 is-glob: 4.0.3 optionalDependencies: - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.8.1(eslint@9.14.0)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@9.14.0) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.8.1(eslint@9.14.0)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.8.1(eslint@9.14.0)(typescript@5.6.3))(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.8.1(eslint@9.14.0)(typescript@5.6.3))(eslint@9.14.0))(eslint@9.14.0))(eslint@9.14.0) transitivePeerDependencies: - '@typescript-eslint/parser' - eslint-import-resolver-node @@ -6729,7 +6726,7 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.8.1(eslint@9.14.0)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@9.14.0): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.8.1(eslint@9.14.0)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.8.1(eslint@9.14.0)(typescript@5.6.3))(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.8.1(eslint@9.14.0)(typescript@5.6.3))(eslint@9.14.0))(eslint@9.14.0))(eslint@9.14.0): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.8 From 2b89a658f6b6cd1e490662096ce166f71a889ff0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 15 Nov 2024 00:27:51 +0000 Subject: [PATCH 2/2] chore(deps): Bump @sap/cds from 8.3.1 to 8.4.2 (#292) Bumps [@sap/cds](https://cap.cloud.sap/) from 8.3.1 to 8.4.2. --- updated-dependencies: - dependency-name: "@sap/cds" dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pnpm-lock.yaml | 78 +++++++++++++++++++++++++------------------------- 1 file changed, 39 insertions(+), 39 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ca2b218de..ec926ab17 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,7 +12,7 @@ importers: devDependencies: '@cap-js/cds-types': specifier: ^0.7.0 - version: 0.7.0(@sap/cds@8.4.1(express@4.21.1)) + version: 0.7.0(@sap/cds@8.4.2(express@4.21.1)) '@changesets/cli': specifier: ^2.27.9 version: 2.27.9 @@ -262,16 +262,16 @@ importers: version: 0.1.0(@langchain/core@0.3.18(openai@4.61.1(zod@3.23.8))) '@sap-ai-sdk/ai-api': specifier: canary - version: 1.2.1-20241113013102.0 + version: 1.2.1-20241114013105.0 '@sap-ai-sdk/foundation-models': specifier: canary - version: 1.2.1-20241113013102.0 + version: 1.2.1-20241114013105.0 '@sap-ai-sdk/langchain': specifier: canary - version: 1.2.1-20241113013102.0(openai@4.61.1(zod@3.23.8))(zod@3.23.8) + version: 1.2.1-20241114013105.0(openai@4.61.1(zod@3.23.8))(zod@3.23.8) '@sap-ai-sdk/orchestration': specifier: canary - version: 1.2.1-20241113013102.0 + version: 1.2.1-20241114013105.0 '@sap-cloud-sdk/util': specifier: ^3.22.2 version: 3.22.2 @@ -987,20 +987,20 @@ packages: '@rtsao/scc@1.1.0': resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} - '@sap-ai-sdk/ai-api@1.2.1-20241113013102.0': - resolution: {integrity: sha512-VEjfukey7VdnXq/Mfpba3WCPCeoJZXHnRwjfTyTK/hwbVAvPmFg4dKKIXWsEykiNApLcIhG9Ygjcixhrmyscow==} + '@sap-ai-sdk/ai-api@1.2.1-20241114013105.0': + resolution: {integrity: sha512-AK/P+rGvkqL20RneAg03iIWGdh/VFgk+k+UvrP3d+Ai3xc7BD14WX0vKlLx6Kjf6V3vPEYru1YGBeebqStEqWw==} - '@sap-ai-sdk/core@1.2.1-20241113013102.0': - resolution: {integrity: sha512-23x7EoCgsRxADK9RBcMlH6DwOUmsCuyGEh+ECncol31qAKq8pYe+vfrIqVPpchQJdvpKC/3oszMoxlMuNGHMGA==} + '@sap-ai-sdk/core@1.2.1-20241114013105.0': + resolution: {integrity: sha512-ia5UxmrlqLOrvABDooPHFSbLbowiWM6Vs9g79Dro5ueYrvnRYS/RN0lQNaI17kUXBJoTE4f/dQvvKj4M2CXRmw==} - '@sap-ai-sdk/foundation-models@1.2.1-20241113013102.0': - resolution: {integrity: sha512-KyUbNDYS4rvAypDpJTyaEoCnCm8KkjkJUa5cQlvX6wkqEYQhjqwHhOXvAo2KoyZ/7Z/SisKwPaIrBhFKALaZHw==} + '@sap-ai-sdk/foundation-models@1.2.1-20241114013105.0': + resolution: {integrity: sha512-BgnON2AG0SdpRJWAJgg2wcNcT/7epFKw449MchxbiAjhzdt9adUp3vFQoTa0K9NbGynWhVS3OlDOzAuj8+oBYw==} - '@sap-ai-sdk/langchain@1.2.1-20241113013102.0': - resolution: {integrity: sha512-LPYMrkqmjbqSlmvjMOtDupg3e8r0/SHDpLNuhByeVhJ5K4RrCSXZu2mocHDwjzR/TXWYkdoPDzcqfEgtBOrMAA==} + '@sap-ai-sdk/langchain@1.2.1-20241114013105.0': + resolution: {integrity: sha512-FcrAa8TCLqrie/vDgFMd16iAVQyIZdoiX2rmpFVK+o36mArGM8m9q7o6S17cAH7jlSaEyFFyyr8c3hIQpI573w==} - '@sap-ai-sdk/orchestration@1.2.1-20241113013102.0': - resolution: {integrity: sha512-KWxhlWd+S7+k7R/fWcLWz09Vqe42f5dRphRfVZFKi82bO6j3KIFvCg+flX0AXaJt9CqpnqhvXvINFxZ7Yay7Qg==} + '@sap-ai-sdk/orchestration@1.2.1-20241114013105.0': + resolution: {integrity: sha512-VBRjRD3z/iiRz84SEQhva4SrsZUtKpmhs7pBeicSr6QyA7txaGiyN9WTfXNqQsBpWqOkZVEM8eDkuGHQldqesQ==} '@sap-cloud-sdk/connectivity@3.22.2': resolution: {integrity: sha512-kfJaRersOefqKn12Q6my+Bch8TVD83j9CsA/vKQI6D7UpdJjfy6k4EbwlVeuehWb4kvTLYvQLvjJE0JhelESPQ==} @@ -1054,8 +1054,8 @@ packages: express: optional: true - '@sap/cds@8.4.1': - resolution: {integrity: sha512-dchM8blfY9lYiB2hGA/yWQ+Mtu83qD4Y/romWIYLMzD8vhiLrovXcuR8fwP5dyuP2i33ZOG1twNOXR5ObWqZWg==} + '@sap/cds@8.4.2': + resolution: {integrity: sha512-wHiPU+PciyG6L7oGglUq22ji+aV5SFwef/gF/rnIheMirzxpDlHq+K8GwqmcrrFu3GWRioQGRe3rr8KAalOQrg==} engines: {node: '>=18'} hasBin: true peerDependencies: @@ -4633,9 +4633,9 @@ snapshots: '@bcoe/v8-coverage@0.2.3': {} - '@cap-js/cds-types@0.7.0(@sap/cds@8.4.1(express@4.21.1))': + '@cap-js/cds-types@0.7.0(@sap/cds@8.4.2(express@4.21.1))': dependencies: - '@sap/cds': 8.4.1(express@4.21.1) + '@sap/cds': 8.4.2(express@4.21.1) '@types/express': 4.17.21 '@changesets/apply-release-plan@7.0.5': @@ -5307,15 +5307,15 @@ snapshots: '@rtsao/scc@1.1.0': {} - '@sap-ai-sdk/ai-api@1.2.1-20241113013102.0': + '@sap-ai-sdk/ai-api@1.2.1-20241114013105.0': dependencies: - '@sap-ai-sdk/core': 1.2.1-20241113013102.0 + '@sap-ai-sdk/core': 1.2.1-20241114013105.0 '@sap-cloud-sdk/connectivity': 3.22.2 transitivePeerDependencies: - debug - supports-color - '@sap-ai-sdk/core@1.2.1-20241113013102.0': + '@sap-ai-sdk/core@1.2.1-20241114013105.0': dependencies: '@sap-cloud-sdk/connectivity': 3.22.2 '@sap-cloud-sdk/http-client': 3.22.2 @@ -5325,22 +5325,22 @@ snapshots: - debug - supports-color - '@sap-ai-sdk/foundation-models@1.2.1-20241113013102.0': + '@sap-ai-sdk/foundation-models@1.2.1-20241114013105.0': dependencies: - '@sap-ai-sdk/ai-api': 1.2.1-20241113013102.0 - '@sap-ai-sdk/core': 1.2.1-20241113013102.0 + '@sap-ai-sdk/ai-api': 1.2.1-20241114013105.0 + '@sap-ai-sdk/core': 1.2.1-20241114013105.0 '@sap-cloud-sdk/http-client': 3.22.2 '@sap-cloud-sdk/util': 3.22.2 transitivePeerDependencies: - debug - supports-color - '@sap-ai-sdk/langchain@1.2.1-20241113013102.0(openai@4.61.1(zod@3.23.8))(zod@3.23.8)': + '@sap-ai-sdk/langchain@1.2.1-20241114013105.0(openai@4.61.1(zod@3.23.8))(zod@3.23.8)': dependencies: '@langchain/core': 0.3.18(openai@4.61.1(zod@3.23.8)) - '@sap-ai-sdk/ai-api': 1.2.1-20241113013102.0 - '@sap-ai-sdk/core': 1.2.1-20241113013102.0 - '@sap-ai-sdk/foundation-models': 1.2.1-20241113013102.0 + '@sap-ai-sdk/ai-api': 1.2.1-20241114013105.0 + '@sap-ai-sdk/core': 1.2.1-20241114013105.0 + '@sap-ai-sdk/foundation-models': 1.2.1-20241114013105.0 zod-to-json-schema: 3.23.5(zod@3.23.8) transitivePeerDependencies: - debug @@ -5348,10 +5348,10 @@ snapshots: - supports-color - zod - '@sap-ai-sdk/orchestration@1.2.1-20241113013102.0': + '@sap-ai-sdk/orchestration@1.2.1-20241114013105.0': dependencies: - '@sap-ai-sdk/ai-api': 1.2.1-20241113013102.0 - '@sap-ai-sdk/core': 1.2.1-20241113013102.0 + '@sap-ai-sdk/ai-api': 1.2.1-20241114013105.0 + '@sap-ai-sdk/core': 1.2.1-20241114013105.0 '@sap-cloud-sdk/http-client': 3.22.2 '@sap-cloud-sdk/util': 3.22.2 transitivePeerDependencies: @@ -5379,7 +5379,7 @@ snapshots: eslint: 9.14.0 eslint-config-prettier: 9.1.0(eslint@9.14.0) eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.8.1(eslint@9.14.0)(typescript@5.6.3))(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.8.1(eslint@9.14.0)(typescript@5.6.3))(eslint@9.14.0))(eslint@9.14.0) - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.8.1(eslint@9.14.0)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.8.1(eslint@9.14.0)(typescript@5.6.3))(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.8.1(eslint@9.14.0)(typescript@5.6.3))(eslint@9.14.0))(eslint@9.14.0))(eslint@9.14.0) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.8.1(eslint@9.14.0)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@9.14.0) eslint-plugin-jsdoc: 50.3.2(eslint@9.14.0) eslint-plugin-prettier: 5.2.1(@types/eslint@8.56.10)(eslint-config-prettier@9.1.0(eslint@9.14.0))(eslint@9.14.0)(prettier@3.3.3) eslint-plugin-regex: 1.10.0(eslint@9.14.0) @@ -5472,9 +5472,9 @@ snapshots: '@sap/cds': 8.3.1(express@4.21.1) express: 4.21.1 - '@sap/cds-fiori@1.2.7(@sap/cds@8.4.1(express@4.21.1))(express@4.21.1)': + '@sap/cds-fiori@1.2.7(@sap/cds@8.4.2(express@4.21.1))(express@4.21.1)': dependencies: - '@sap/cds': 8.4.1(express@4.21.1) + '@sap/cds': 8.4.2(express@4.21.1) express: 4.21.1 '@sap/cds-foss@5.0.1': @@ -5492,10 +5492,10 @@ snapshots: optionalDependencies: express: 4.21.1 - '@sap/cds@8.4.1(express@4.21.1)': + '@sap/cds@8.4.2(express@4.21.1)': dependencies: '@sap/cds-compiler': 5.3.2 - '@sap/cds-fiori': 1.2.7(@sap/cds@8.4.1(express@4.21.1))(express@4.21.1) + '@sap/cds-fiori': 1.2.7(@sap/cds@8.4.2(express@4.21.1))(express@4.21.1) '@sap/cds-foss': 5.0.1 optionalDependencies: express: 4.21.1 @@ -6708,7 +6708,7 @@ snapshots: is-bun-module: 1.2.1 is-glob: 4.0.3 optionalDependencies: - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.8.1(eslint@9.14.0)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.8.1(eslint@9.14.0)(typescript@5.6.3))(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.8.1(eslint@9.14.0)(typescript@5.6.3))(eslint@9.14.0))(eslint@9.14.0))(eslint@9.14.0) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.8.1(eslint@9.14.0)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@9.14.0) transitivePeerDependencies: - '@typescript-eslint/parser' - eslint-import-resolver-node @@ -6726,7 +6726,7 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.8.1(eslint@9.14.0)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.8.1(eslint@9.14.0)(typescript@5.6.3))(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.8.1(eslint@9.14.0)(typescript@5.6.3))(eslint@9.14.0))(eslint@9.14.0))(eslint@9.14.0): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.8.1(eslint@9.14.0)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@9.14.0): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.8