diff --git a/src/services/operations.test.ts b/src/services/operations.test.ts index 8af2b7fc..25814330 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,7 +416,28 @@ describe("processConversionTMtoTD", () => { "" ); - 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", () => { diff --git a/src/services/operations.ts b/src/services/operations.ts index 55150021..a6bb0f03 100644 --- a/src/services/operations.ts +++ b/src/services/operations.ts @@ -134,9 +134,19 @@ export function processConversionTMtoTD( }; } - 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);