From 3bdbd8d21066b51d23f5eae741849ddddc8efbee Mon Sep 17 00:00:00 2001 From: Rohith Date: Fri, 19 Dec 2025 22:24:52 +0530 Subject: [PATCH 1/7] feat:fixed tm to td conversion Signed-off-by: Rohith --- src/services/operations.ts | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/services/operations.ts b/src/services/operations.ts index 5515002..88cfbf4 100644 --- a/src/services/operations.ts +++ b/src/services/operations.ts @@ -134,8 +134,17 @@ export function processConversionTMtoTD( }; } - delete parsed["@type"]; - delete parsed["tm:required"]; + if(parsed["@type"]){ + if(Array.isArray(parsed["@type"])){ + parsed["@type"]=parsed["@type"].filter((x:String)=>x!="tm:ThingModel"); + if(parsed["@type"].length==0){ + delete parsed["@type"]; + } + }else { + // string + delete parsed["@type"]; + } + } return parsed; } catch (error) { From 2c3f30e3c151812b72e0f7e43cc7de5077684d0d Mon Sep 17 00:00:00 2001 From: Rohith Date: Fri, 19 Dec 2025 22:24:52 +0530 Subject: [PATCH 2/7] feat:fixed tm to td conversion Signed-off-by: Rohith --- src/services/operations.ts | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/services/operations.ts b/src/services/operations.ts index 5515002..88cfbf4 100644 --- a/src/services/operations.ts +++ b/src/services/operations.ts @@ -134,8 +134,17 @@ export function processConversionTMtoTD( }; } - delete parsed["@type"]; - delete parsed["tm:required"]; + if(parsed["@type"]){ + if(Array.isArray(parsed["@type"])){ + parsed["@type"]=parsed["@type"].filter((x:String)=>x!="tm:ThingModel"); + if(parsed["@type"].length==0){ + delete parsed["@type"]; + } + }else { + // string + delete parsed["@type"]; + } + } return parsed; } catch (error) { From 845220d6119ac711f19644c79741be049139f851 Mon Sep 17 00:00:00 2001 From: Rohith Date: Mon, 22 Dec 2025 19:15:53 +0530 Subject: [PATCH 3/7] committing changes --- src/services/operations.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/services/operations.ts b/src/services/operations.ts index 88cfbf4..a56135f 100644 --- a/src/services/operations.ts +++ b/src/services/operations.ts @@ -123,7 +123,7 @@ export function processConversionTMtoTD( if (parsed.events) { parsed.events = filterAffordances(parsed.events, events); } - +//fix/conversion_tm_to_td if (!isVersionValid(parsed)) { let objectVersion = parsed["version"]; From 1954647ecd16b6d809b545b3badd3b7f7a21cd98 Mon Sep 17 00:00:00 2001 From: Rohith Date: Mon, 22 Dec 2025 22:59:52 +0530 Subject: [PATCH 4/7] modified according to pr_review --- src/services/operations.test.ts | 3 ++- src/services/operations.ts | 27 ++++++++++++++------------- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/src/services/operations.test.ts b/src/services/operations.test.ts index 8af2b7f..a33ce41 100644 --- a/src/services/operations.test.ts +++ b/src/services/operations.test.ts @@ -415,8 +415,9 @@ describe("processConversionTMtoTD", () => { [], "" ); - + expect(result).not.toHaveProperty("tm:required"); + expect(result["@type"]).not.toContain("tm:ThingModel"); }); test("handles complex TM to TD conversion", () => { diff --git a/src/services/operations.ts b/src/services/operations.ts index a56135f..02fc73b 100644 --- a/src/services/operations.ts +++ b/src/services/operations.ts @@ -123,7 +123,7 @@ export function processConversionTMtoTD( if (parsed.events) { parsed.events = filterAffordances(parsed.events, events); } -//fix/conversion_tm_to_td + //fix/conversion_tm_to_td if (!isVersionValid(parsed)) { let objectVersion = parsed["version"]; @@ -134,18 +134,19 @@ export function processConversionTMtoTD( }; } - if(parsed["@type"]){ - if(Array.isArray(parsed["@type"])){ - parsed["@type"]=parsed["@type"].filter((x:String)=>x!="tm:ThingModel"); - if(parsed["@type"].length==0){ - delete parsed["@type"]; - } - }else { - // string - delete parsed["@type"]; - } - } - + if (parsed["@type"]) { + if (Array.isArray(parsed["@type"])) { + parsed["@type"] = parsed["@type"].filter( + (x: String) => x != "tm:ThingModel" + ); + if (parsed["@type"].length == 0) { + delete parsed["@type"]; + } + } else { + delete parsed["@type"]; + } + } + delete parsed["tm:required"]; return parsed; } catch (error) { console.error("Error processing TM:", error); From b8e33e5afcb311184bfc187cf58e6c7f46856f3e Mon Sep 17 00:00:00 2001 From: Rohith Date: Tue, 23 Dec 2025 09:47:22 +0530 Subject: [PATCH 5/7] modified test --- src/services/operations.test.ts | 3 +-- src/services/operations.ts | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/services/operations.test.ts b/src/services/operations.test.ts index a33ce41..8af2b7f 100644 --- a/src/services/operations.test.ts +++ b/src/services/operations.test.ts @@ -415,9 +415,8 @@ describe("processConversionTMtoTD", () => { [], "" ); - + expect(result).not.toHaveProperty("tm:required"); - expect(result["@type"]).not.toContain("tm:ThingModel"); }); test("handles complex TM to TD conversion", () => { diff --git a/src/services/operations.ts b/src/services/operations.ts index 189c1de..a6bb0f0 100644 --- a/src/services/operations.ts +++ b/src/services/operations.ts @@ -123,7 +123,7 @@ export function processConversionTMtoTD( if (parsed.events) { parsed.events = filterAffordances(parsed.events, events); } - + if (!isVersionValid(parsed)) { let objectVersion = parsed["version"]; From bb0200c70cc74d7ca98fdee68955de321eb12639 Mon Sep 17 00:00:00 2001 From: Rohith Date: Wed, 24 Dec 2025 21:42:36 +0530 Subject: [PATCH 6/7] test: cover both partial and full deletion of @type array --- src/services/operations.test.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/services/operations.test.ts b/src/services/operations.test.ts index 8af2b7f..dcf96e5 100644 --- a/src/services/operations.test.ts +++ b/src/services/operations.test.ts @@ -416,6 +416,10 @@ describe("processConversionTMtoTD", () => { "" ); + if (result["@type"]) { + expect(Array.isArray(result["@type"])).toBe(true); + expect(result["@type"]).not.toContain("tm:ThingModel"); + } expect(result).not.toHaveProperty("tm:required"); }); From 20f840307b17cae512d3e780a33e0212e5d69e8b Mon Sep 17 00:00:00 2001 From: Rohith Date: Thu, 25 Dec 2025 21:57:25 +0530 Subject: [PATCH 7/7] test: verify @type filtering for both string and array inputs --- src/services/operations.test.ts | 33 +++++++++++++++++++++++++-------- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/src/services/operations.test.ts b/src/services/operations.test.ts index dcf96e5..2581433 100644 --- a/src/services/operations.test.ts +++ b/src/services/operations.test.ts @@ -401,14 +401,14 @@ describe("processConversionTMtoTD", () => { }); test("removes TM-specific fields", () => { - const tmContent = `{ + const stringTypeContent = `{ "@type": "tm:ThingModel", "tm:required": ["#properties/prop1"], "properties": { "prop1": {} } }`; - const result = processConversionTMtoTD( - tmContent, + const stringResult = processConversionTMtoTD( + stringTypeContent, {}, ["prop1"], [], @@ -416,11 +416,28 @@ describe("processConversionTMtoTD", () => { "" ); - if (result["@type"]) { - expect(Array.isArray(result["@type"])).toBe(true); - expect(result["@type"]).not.toContain("tm:ThingModel"); - } - expect(result).not.toHaveProperty("tm:required"); + expect(stringResult).not.toHaveProperty("tm:required"); + expect(stringResult).not.toHaveProperty("@type"); + + const arrayTypeContent = `{ + "@type": ["tm:ThingModel","example_key:example_val"], + "tm:required": ["#properties/prop1"], + "properties": { "prop1": {} } + }`; + + const arrayResult = processConversionTMtoTD( + arrayTypeContent, + {}, + ["prop1"], + [], + [], + "" + ); + + expect(Array.isArray(arrayResult["@type"])).toBe(true); + expect(arrayResult["@type"]).toContain("example_key:example_val"); + expect(arrayResult["@type"]).not.toContain("tm:ThingModel"); + expect(arrayResult).not.toHaveProperty("tm:required"); }); test("handles complex TM to TD conversion", () => {