From c78fc1a270c8e79167f4a618b4ec7b83a65826fd Mon Sep 17 00:00:00 2001 From: viktorsperling Date: Tue, 10 Mar 2026 14:33:54 +0100 Subject: [PATCH 1/2] feat(dts-generator): add getMessagesByPath declarations and tests to TypedJSONModel --- .../typed-json-model/webapp/model/model.ts | 5 +++ .../webapp/model/test/cases/edgeCases.ts | 32 +++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/test-packages/typed-json-model/webapp/model/model.ts b/test-packages/typed-json-model/webapp/model/model.ts index a3b70ad..d951928 100644 --- a/test-packages/typed-json-model/webapp/model/model.ts +++ b/test-packages/typed-json-model/webapp/model/model.ts @@ -6,6 +6,7 @@ import { PropertyByRelativeBindingPath, RelativeBindingPath, } from "./typing"; +import Message from "sap/ui/core/message/Message"; export class TypedJSONContext> extends Context { constructor(oModel: TypedJSONModel, sPath: Root) { @@ -43,6 +44,10 @@ export class TypedJSONModel extends JSONModel { return super.getData() as Data; } + getMessagesByPath>(sPath: Path, bPrefixMatch?: boolean): Message[] { + return super.getMessagesByPath(sPath, bPrefixMatch); + } + getProperty>(sPath: Path): PropertyByAbsoluteBindingPath; getProperty, Root extends AbsoluteBindingPath>( sPath: Path, diff --git a/test-packages/typed-json-model/webapp/model/test/cases/edgeCases.ts b/test-packages/typed-json-model/webapp/model/test/cases/edgeCases.ts index 43fe5e6..6f4f4b3 100644 --- a/test-packages/typed-json-model/webapp/model/test/cases/edgeCases.ts +++ b/test-packages/typed-json-model/webapp/model/test/cases/edgeCases.ts @@ -2,6 +2,7 @@ * @file Various edge cases to test the TypedJSONModel */ +import Message from "sap/ui/core/message/Message"; import { TypedJSONModel } from "../../model"; /*********************************************************************************************************************** @@ -65,3 +66,34 @@ const model4 = new TypedJSONModel(edgeCase); /** @expect ok */ model4.setProperty("/anIntersection", { a: 1, b: "b" }); /** @expect ts2345 */ model4.setProperty("/anIntersection", { a: 1 }); /** @expect ts2322 */ model4.setProperty("/anIntersection", { a: 1, b: 2 }); + +/*********************************************************************************************************************** + * Check model.getMessagesByPath + **********************************************************************************************************************/ + +const data = { + aString: "string", + anObject: { a: "foo" }, + anArray: [], + anArrayOfObjects: [{ aNumber: 1 }], +}; + +const model5 = new TypedJSONModel(data); + +/** @expect ok */ model5.getMessagesByPath("/aString"); +/** @expect ok */ model5.getMessagesByPath("/aString", true); + +/** @expect ok */ const messages: Message[] = model5.getMessagesByPath("/anObject"); +/** @expect ok */ model5.getMessagesByPath("/anObject", true); + +/** @expect ok */ model5.getMessagesByPath("/anObject/a"); +/** @expect ok */ model5.getMessagesByPath("/anObject/a", true); + +/** @expect ok */ model5.getMessagesByPath("/anArrayOfObjects/0/aNumber"); +/** @expect ok */ model5.getMessagesByPath("/anArrayOfObjects/0/aNumber", true); + +/** @expect ts2345 */ model5.getMessagesByPath("anObject"); +/** @expect ts2345 */ model5.getMessagesByPath("anObject", true); + +/** @expect ts2345 */ model5.getMessagesByPath("/anArray/0/doesNotExist"); +/** @expect ts2345 */ model5.getMessagesByPath("/anArray/0/doesNotExist", true); From a4faa4d5204d29bab13182039d76e57257da031f Mon Sep 17 00:00:00 2001 From: viktorsperling Date: Tue, 10 Mar 2026 14:37:55 +0100 Subject: [PATCH 2/2] chore(dts-generator): adds getMessagesByPath declaration --- packages/dts-generator/src/resources/typed-json-model.d.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/dts-generator/src/resources/typed-json-model.d.ts b/packages/dts-generator/src/resources/typed-json-model.d.ts index 5d33d33..0475449 100644 --- a/packages/dts-generator/src/resources/typed-json-model.d.ts +++ b/packages/dts-generator/src/resources/typed-json-model.d.ts @@ -2,6 +2,7 @@ declare module "sap/ui/model/json/TypedJSONModel" { import JSONModel from "sap/ui/model/json/JSONModel"; import TypedJSONContext from "sap/ui/model/json/TypedJSONContext"; import Context from "sap/ui/model/Context"; + import Message from "sap/ui/core/message/Message"; /** * TypedJSONModel is a subclass of JSONModel that provides type-safe access to the model data. It is only available when using UI5 with TypeScript. @@ -19,6 +20,10 @@ declare module "sap/ui/model/json/TypedJSONModel" { bReload?: boolean, ): TypedJSONContext; getData(): Data; + getMessagesByPath>( + sPath: Path, + bPrefixMatch?: boolean, + ): Message[]; getProperty>( sPath: Path, ): PropertyByAbsoluteBindingPath;